私が使用する言語はCです。 xとnの型はintです。x = 0x80000000の場合、〜(x-1)と〜x + 1の差
それは、xの値を示し、nおよびXの補数のnビットをシフトさせる二つの方法
printf("x=%x,n=%d,first=%x,second=%x\n",x,n,((~(x+0xffffffff))>>n),((~x+1)>>n));
を次のように1行のコードを有しています。 x = 0x80000000、〜(x + 0xffffffff)= 0x8000000、〜x + 1 = 0x80000000の場合、これらの2つをnビットシフトすると結果は異なります。私は(〜1 + 1に0xFFFFFFFFを変更した場合
ところで、それは意味〜(X +(〜1 + 1))、その結果は〜X + 1
私はそれがなぜ起こったか疑問に思う。感謝と同じです。
["(uint16_t)-1"ポータブルCコード?](http://embeddedgurus.com/barr-code/2011/06/is-uint16_t-1-portable-c-code/) – Lundin
@ Lundinその記事は間違っています。 '(uint16_t)-1' **は実装が' stdint.h'でその型を提供するならば '0xFFFF'を生成する標準によって**保証されています。 (もちろん、それがあなた自身のtypedefなら何も保証されません)あいまいさはありません。固定幅型はパディングビットを必要としないので、値のビットにも制限されません(そうです。 'uintN_t'の値ビットだけです)。 –