2014-02-28 78 views
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」。

+3

爲什麼必須在那裏?十六進制與這個有什麼關係? –

+0

這是一個任務的摘錄,但問題很簡單。十六進制只是二進制位的表示。 – user3348713

+0

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

回答

1

8000(十六進制)將是答案(在16位機器上)。

這是因爲當您用2的補碼取消8000時,您將補碼加1,即7FFF + 1或返回8000。在十進制表示中,編號爲-32768

在給定代碼的情況下,這將是真的如果int對於給定的編譯器和處理器是16位。否則,i將需要聲明爲short int或只是short

+0

建議'0x8000'是'-32768'而不是'-65536'。 – chux

+0

@chux hah yep很好的接收,謝謝。規則在計算機中:總是以2爲因子;) – lurker

+1

[在2倍的範圍內](http://en.wiktionary.org/wiki/close_enough_for_government_work)有時足夠好。 – chux