私が使用する言語は C です。x と n の型は int です。
次のような1行のコードがあります
printf("x=%x,n=%d,first=%x,second=%x\n",x,n,((~(x+0xffffffff))>>n),((~x+1)>>n));
x,n の値と、x の補数の n ビットをシフトする 2 つの方法を示します。x=0x80000000,~(x+0xffffffff)=0x8000000,~x+1=0x80000000のとき、この2つをnビットシフトすると結果が異なります。
ところで、0xffffffff を ~1+1 (つまり ~(x+(~1+1))) に変更すると、結果は ~x+1 と同じになります。
なぜそうなったのだろうか。ありがとう。