c ++中字符整数值的范围
-
06-07-2019 - |
题
我正在阅读 C ++编程语言,其中Stroustrup声明char的int值可以在0到255或-127到127之间,具体取决于实现。它是否正确?它似乎应该是从-128到127.如果不是,为什么在第二种实现可能性中它们只有255个可能值,而不是256.
解决方案
你陷入了二人补充思考--C ++标准没有定义用于负数的表示法!
如果您的计算机(上帝禁止)使用的补充来表示否定数字,在8位字节中的范围为-127到+ 127。从好的方面来说,你有两个不同的可能表示零...
然而,在现实世界中,你不太可能遇到一台补充电脑。
其他提示
认为unsigned char的范围是0到255是错误的。这只是它的最小范围。一个char必须至少有8位,而signed char,unsigned char和char本身确实可以只有8位。所以那意味着unsigned char可以超过255.虽然不可否认,我没有实现它有超过8位的实现,理论上它是可能的。这是在c89标准中指定的(在c ++ 03基础上),记录文件limits.h(CHAR_BIT,UCHAR_MAX,CHAR_MAX)。
从阅读中可以看出它可能是其中任何一种,具体取决于实施。
因为标准没有提及关于char类型的任何内容,所以“char”指的是可以是:
-
" unsigned char" (0-255)在某些编译器上(例如:针对ARM处理器的TexasInstruments编译器--OMAP系列)
-
" signed char" (-128-127)大多数编译器(gcc,MSVC ......)
醇>
为了确保您总是有一个明确定义的范围,您应该使用“signed char”;或“unsigned char”。
感谢Roddy和Esteban Brenes的回复。
这是我目前的理解:
有三种可能性。如果值表示为无符号,则char的范围为0到255.如果值以二进制补码表示,则char的范围为-128到127.最后,如果值表示为带符号的补码一个char的范围从-127到127.这最后的可能性表明,与前两个实现的256个可能值相比,只有255个可能的值,但是这没有考虑到一个补码表示中的负零。