十六进制值等于负值

时间:2014-02-28 00:12:11

标签: c int hex signed

16位十六进制signed int值适用于此代码:

#include <stdio.h>

int main() {
  while (1) {
    int i;
    if (scanf("%x", &i) != 1) break;
    printf("%d %s -%d\n", i, (i == -i) ? "==" : "!=", i); 
  }
  return 0;
}

除了“0”之外,必须有一些值返回“==”。

1 个答案:

答案 0 :(得分:2)

8000(hex)就是答案(在16位机器上)。

这是因为当你在2的补码中否定8000时,你取补码加1,使得7FFF + 1或回到8000。在十进制表示中,数字为-32768

对于给定代码,如果 int为给定编译器和处理器的16位,则为真。否则,i需要声明为short intshort