2016-10-19 105 views
-1

我想弄清楚這段代碼,但沒有運氣。我需要一些解釋有人可以解釋這段代碼做什麼?

signed char c = '0'; 
for(; c > 0; c++); 
printf("%d", c); 

輸出是-128,當我改變符號爲「少於」輸出是48,爲什麼?

+2

該代碼具有未定義的行爲。 –

+0

想一想'char'的大小並考慮符號位。 –

+0

不可能可靠地回答「爲什麼?」這個問題。從理論上講,你最終可能會[格式化你的硬盤](https://randomascii.wordpress.com/2014/05/19/undefined-behavior-can-format-your-drive/) –

回答

4

http://www.asciitable.com/

字符'0'有數值48

,直到你的價值是低於0,所以在signed char上溢恰好-128你算這件事。編輯:(這是未定義的行爲,但常見的結果,這並不意味着它每次都發生,這意味着不要這樣做)

如果你評估小於0那麼48不小於0所以你不計數c。

正如kerrek指出的那樣,您有未定義的行爲,因爲您在簽名變量上產生溢出。

+0

啊,我明白了, t想過這件事,謝謝,這可以解決很多問題 – TheNemesis584

+0

答案確實說明了這一點,但讓我再次做到超級清晰:不要依賴這種行爲。 – davmac

+0

@davmac我會在^^中編輯它 –

相關問題