我使用的语言是 C。x 和 n 的类型是 int。
我有一行代码如下
printf("x=%x,n=%d,first=%x,second=%x\n",x,n,((~(x+0xffffffff))>>n),((~x+1)>>n));
它显示了 x,n 的值以及移动 x 的补数的 n 位的两种方法。当 x=0x80000000,~(x+0xffffffff)=0x8000000,~x+1=0x80000000 时,将这两个移位 n 位时,结果是不同的。
顺便说一句,如果我将 0xffffffff 更改为 ~1+1(这意味着 ~(x+(~1+1)),结果与 ~x+1 相同
我想知道为什么会这样。谢谢。