什么 16 位十六进制有符号 int 值适用于以下代码:
#include <stdio.h>
int main() {
while (1) {
int i;
if (scanf("%x", &i) != 1) break;
printf("%d %s -%dn", i, (i == -i) ? "==" : "!=", i);
}
return 0;
}
必须有一些值返回"==",而不是"0"。
8000
(十六进制)将是答案(在16位机器上)。
这是因为当你否定 2 补码中的8000
时,你取补码加 1,所以这是7FFF + 1
或回到8000
。在十进制表示中,数字为 -32768
。
在给定代码的情况下,如果给定编译器和处理器的int
为 16 位,则为真。否则,i
将需要声明为 short int
或只是 short
.