【发布时间】:2016-05-24 22:50:33
【问题描述】:
给定:
int number = 0xFFFFFF87;
number = ~number + 1;
printf ("%x", number);
为什么“数字”变成“79”而不是“87”?我怎样才能让它'87'?
【问题讨论】:
标签: hex bitwise-operators signed twos-complement
给定:
int number = 0xFFFFFF87;
number = ~number + 1;
printf ("%x", number);
为什么“数字”变成“79”而不是“87”?我怎样才能让它'87'?
【问题讨论】:
标签: hex bitwise-operators signed twos-complement
~ 否定每一位,不仅是十六进制组为 0xF 的那些。
要让它0x87只需反转操作,即:
int number = ~(0x87-1); // which is 0xFFFFFF79
【讨论】:
它是 0x79,因为 ~0xFFFFFF87 = 0x00000078 加上 1 后得到 0x00000079。
要获取0x87,您应该使用:
int number = 0xFFFFFF87 & 0xFF;
这将只选择最低有效字节并用零屏蔽其他字节。
【讨论】: