2008-11-04 40 views
12

我在閱讀C++編程語言並且在其中,Stroustrup指出char的int值可以在0到255之間或-127到127之間,具體取決於實現。它是否正確?現在看來似乎應該是從-128到127,如果不是,爲什麼是他們唯一的255種可能值在第二個執行可能性,而不是256C++中字符的整數值的範圍

+0

你有什麼想法,爲什麼整數的範圍是從-128到127,而不是-127到128 ?? – user1437027 2012-07-07 13:37:38

回答

0

感謝Roddy和Esteban Brenes的回覆。

這是我目前的理解:

有三種可能性。如果值表示爲無符號,則字符的取值範圍爲0到255.如果值表示爲以二進制補碼錶示的符號,則字符的取值範圍爲-128到127.最後,如果值表示爲補碼,char的範圍從-127到127.這個最終的可能性表明,與前兩個實現的256個可能值相比,只有255個可能的值,但是這沒有考慮補碼錶示中的負零。

+0

幾乎:無符號從0到255不是256.我從來沒有在1的補充機器上工作,所以+0和-0的工作方式是一個猜測。我期望從C的角度來看,你永遠無法分辨 – Roddy 2008-11-04 22:52:46

+0

感謝您的更正 – 108 2008-11-04 22:54:56

3

認爲unsigned char範圍從0到255是錯誤的,這只是它的最小範圍。一個字符必須至少有8位,並且有符號字符,無符號字符和字符本身的確可以有更多,只有8位。那麼這意味着unsigned char可能會超過255.儘管承認,我還沒有實現超過8位的實現,理論上這是可能的。這在c89標準(在C++ 03基礎上)中指定,記錄文件limits.h(CHAR_BIT,UCHAR_MAX,CHAR_MAX)。

1

由於標準不說的char類型的東西, 「焦炭」 可以是:

  1. 在某些編譯器(例如 「無符號的字符」(0-255):德州儀器編譯器的ARM處理器 - 在大多數編譯器(GCC OMAP系列)

  2. 「符號字符」(-128-127),MSVC ...)

要確保你總是有一個明確的範圍,你應該使用 「有符號字符」或「無符號字符」。