什麼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
您在這裏的任何地方都沒有使用十六進制 - 除非我們沒有看到任務的一部分,否則這並不相關。整數沒有固有的(十進制,十六進制,二進制)表示形式,除非將它們寫入字符串。 –