这可能吗?我有一个 signed int,需要将它右移 4 个位置。我无法将 int 转换为 unsigned int,移位然后返回。之后我需要处理它。
所以如果我有这样的位序列:
x = 1001
并且需要将它向右移动 2 个位置:
x = x >> 2;
我得到 1110;
我想得到 0010。我想不出一种方法来使用 and's 和 or's 来做到这一点。有什么想法吗?
这正是我所需要的。
0x12345678 将 56 替换为 0xab,最后得到:0x1234ab78
我的方法是获取56的权利,
右整数 = Ox12345
取56的左边
int left = Ox 78
得到56
int 替换 = 56
向右返回 |左 |替换
返回
Ox1234ab78
如果替换数字左侧的 MSB 为 1,我会遇到问题。因为我将整个东西向左然后向右移动,并且它一直传递 1。
最佳答案
另一种解决方案,因为我记得在不允许我们使用大的十六进制数的高中时做过类似的作业,如下所示:
x = (x >> 2) & ~((1 << 31) >> 1)
.这给出了与我的其他答案相同的答案,但消除了对大十六进制数的需要。
关于c - 像 unsigned int 一样右移二进制补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7233802/