当对任何数字进行移位操作时,如何返回原始数字

when a shifting operation is applied on any number .how to get back the original number

本文关键字:数字 何返回 返回 原始 任何 位操作      更新时间:2023-10-16
 #include<iostream>
 #include<stdio.h>
 using namespace std;
 int main()
 {
     int n=99;
     int shift=n>>2;
     cout<<shift;
     shift=shift<<2;
     cout<<shift;
 }

上面的结果给出"unsignedShift=24"。问题是,如果24已知,我怎样才能得到原来的值比如n = 99。当我使用左移时,它显示的是96。如何处理负数

如果不存储原始数字(或其部分(实际上是最后一位)),则没有办法,因为移位不是内射,即有一些不同的数字在移位后变得相同。

3>>1 // = 1;
2>>1 // = 1;

如果你有1。你会得到什么?2或3

移动二进制表示的数实际上是除以2。

你正在做:

99 / 2 * 2 = 24.75 .75部分不能是int类型,所以剩下24

24 * 2 * 2 = 96

以二进制:

1100011 = 99

右移两位:

0011000 = 24

向左移动两位:

1100000 = 96

你已经丢失了下面的两位,总共是3。因此,结果的差异是:99 - 96 = 3.

这里真正的问题是你为什么要这样做——你可能不想做位操作。对于实数,请使用double或类似的类型。

当你向右移动2位时,最后2位丢失了,当你向左移动时,它们被00取代

你可以这样做

保留2位

bits_to_be_lost = n &((0x1<<2) - 1)

那么你的代码

必须是

n<<2 | bits_to_be_lost