十六进制补码

时间:2016-02-13 21:19:46

标签: hex bitwise-operators signed twos-complement

鉴于:

int number = 0xFFFFFF87;
number = ~number + 1;
printf ("%x", number);

为什么'数字'成为' 79'而不是' 87'我怎样才能做到' 87' ?

2 个答案:

答案 0 :(得分:1)

因为~0xFFFFFF87 = 0x00000078而是0x79,当添加1时,你得到0x00000079

要获得0x87,您应该使用:

int number = 0xFFFFFF87 & 0xFF;  

,它将仅选择最低有效字节,并将其他字节屏蔽为零。

答案 1 :(得分:0)

~否定了所有内容,而不仅仅是那些具有0xF十六进制组的内容。

使0x87只需反转操作,即:

int number = ~(0x87-1); // which is 0xFFFFFF79