什么16位十六进制签署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”。
什么16位十六进制签署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”。
8000
(十六进制)将是答案(在16位机器上)。
这是因为当您用2的补码取消8000
时,您将补码加1,即7FFF + 1
或返回8000
。在十进制表示中,编号为-32768
。
在给定代码的情况下,这将是真的如果和int
对于给定的编译器和处理器是16位。否则,i
将需要声明为short int
或只是short
。
为什么必须在那里?十六进制与这个有什么关系? –
这是一个任务的摘录,但问题很简单。十六进制只是二进制位的表示。 – user3348713
您在这里的任何地方都没有使用十六进制 - 除非我们没有看到任务的一部分,否则这并不相关。整数没有固有的(十进制,十六进制,二进制)表示形式,除非将它们写入字符串。 –