2014-03-31 54 views
3

我的好奇心越來越好。 會發生什麼(或不發生)當你寫代碼:將字符初始化爲256

char pseudo_char = 256; 

難道存儲虛擬煤焦與256的值?或者這是非法的,不應該這樣做?

+0

焦炭通常是0-255(在大多數系統) – jsantander

+0

編譯器可以做就是了。我期望大多數現代人發出警告並將字符初始化爲零。 –

+4

或'[-128,+ 127]'。不要假設;如果你想明確的話,有'signed char'和'unsigned char'。 – MSalters

回答

9

這是可能是溢出(除非CHAR_MAX >= 256)。這是未定義的行爲,並且可能發生任何事情。這是不太可能來格式化您的硬盤。

+4

'這不太可能格式化您的硬盤。「我喜歡那個評論。 –

+0

有趣。而且CHAR_MAX應該> 256 =?我會假設沒有。 –

+0

@C_B:當'CHAR_BIT == 16'時,我希望它是32767或65535。 – MSalters

1

這將是一個undefined behavior。 char的範圍是-128到+127或0到255,這取決於它是有符號還是無符號,所以在你的情況下可能會發生任何事情。

它會存儲一個值爲256的虛擬字符嗎?

它會告訴你一個未定義的行爲。你不能預測的東西。

還是這是非法的,應該永遠不要做?

我不會說這是非法的,但是如果你不想進入不可預知的環境,那麼不要這樣做。

+0

範圍實際上可能是0到255.它是執行特定的,如果'char'有符號或無符號。 –

+0

您假設的範圍不正確。它至少是'[0,127]',可能更多,但你不應該假設更多,並在哪個方向。 – MSalters

1

這將產生一個警告說「溢出發生」。但是我發現255之後分配給char的任何其他數字 - 它會從0重新開始,併爲其分配適當的ASCII字符。 像

256 -> (null) equivalent to 0 

300 = 256+44 -> , equivalent to 44 
+0

非常有趣,感覺很好。 –

+3

請注意,這是一個編譯器特定的答案,但未能說明哪個編譯器。在一些編譯器中,它甚至取決於設置(例如,在Visual Studio 400-> 144或-112) – MSalters

+0

我想知道這是依賴於機器還是其他?達到255限制後,LSB是否被編譯器拋棄? – vishram0709