我在閱讀C++編程語言並且在其中,Stroustrup指出char的int值可以在0到255之間或-127到127之間,具體取決於實現。它是否正確?現在看來似乎應該是從-128到127,如果不是,爲什麼是他們唯一的255種可能值在第二個執行可能性,而不是256C++中字符的整數值的範圍
回答
你卻被卡在two's complement思維 - C++標準沒有定義表示用於負數!
如果您的計算機(god forbid)使用ones's complement來表示負數,則在8位字節中的範圍爲-127到+127。好處是,你有兩種不同的可能表示爲零...
但是,在現實世界中,you're unlikely to meet a one's complement computer。
好點。我忘記了1的讚美 – 2008-11-04 21:23:19
從閱讀,它似乎它可以是任何的那些,具體取決於實現。
感謝Roddy和Esteban Brenes的回覆。
這是我目前的理解:
有三種可能性。如果值表示爲無符號,則字符的取值範圍爲0到255.如果值表示爲以二進制補碼錶示的符號,則字符的取值範圍爲-128到127.最後,如果值表示爲補碼,char的範圍從-127到127.這個最終的可能性表明,與前兩個實現的256個可能值相比,只有255個可能的值,但是這沒有考慮補碼錶示中的負零。
認爲unsigned char範圍從0到255是錯誤的,這只是它的最小範圍。一個字符必須至少有8位,並且有符號字符,無符號字符和字符本身的確可以有更多,只有8位。那麼這意味着unsigned char可能會超過255.儘管承認,我還沒有實現超過8位的實現,理論上這是可能的。這在c89標準(在C++ 03基礎上)中指定,記錄文件limits.h(CHAR_BIT,UCHAR_MAX,CHAR_MAX)。
由於標準不說的char類型的東西, 「焦炭」 可以是:
在某些編譯器(例如 「無符號的字符」(0-255):德州儀器編譯器的ARM處理器 - 在大多數編譯器(GCC OMAP系列)
「符號字符」(-128-127),MSVC ...)
要確保你總是有一個明確的範圍,你應該使用 「有符號字符」或「無符號字符」。
- 1. C - 字符串中字符的範圍
- 2. 範圍的字符串作爲整數
- 3. 整數類型可以在C++中存儲的值的範圍
- 4. 定義整數範圍C
- 5. Ruby中的整數範圍
- 6. 從ruby中的唯一字符串範圍內生成整數
- 7. 檢查包含數字的字符串值的範圍
- 8. Excel中的數值範圍
- 9. 匹配整數數值範圍在Python
- 10. C++'map'數字範圍
- 11. C++符號的範圍
- 12. Grails驗證字符串爲整數範圍的最佳做法
- 13. 如何在Python中將字符映射到整數範圍[-128,127]?
- 14. 取反正則表達式中的字符範圍內的字符範圍
- 15. 將範圍值轉換爲整數
- 16. VBA如何通過整數範圍值
- 17. 範圍驗證器 - 檢查整數範圍時輸入字母
- 18. Unicode字母數字字符範圍
- 19. SQL超出C#中的值範圍
- 20. 的Java:整數的Unicode表示超過2個字節字符範圍的
- 21. 覆蓋整個Unicode字符範圍的一組字體
- 22. 調整模糊值的輸入範圍
- 23. 字符串下標超出範圍(C++)
- 24. C++字符串下標超出範圍
- 25. 字符串的C++整數
- 26. 字符串的整數值
- 27. 檢查數字範圍的整除性而不重複數字
- 28. C++ constexpr vs宏中的字符串字面值與整數
- 29. 將範圍外(負)值指定爲無符號整數類型
- 30. vb.net中的字符串範圍替代
你有什麼想法,爲什麼整數的範圍是從-128到127,而不是-127到128 ?? – user1437027 2012-07-07 13:37:38