c ++中字符整数值的范围

108*_*108 13 c++ language-implementation language-details

我正在阅读C++编程语言,其中Stroustrup声明char的int值可以在0到255或-127到127之间,具体取决于实现.它是否正确?它似乎应该是从-128到127.如果不是,为什么在第二种实现可能性中它们只有255个可能的值,而不是256.

Rod*_*ddy 16

你陷入了两个补充思维--C++标准没有定义用于负数的表示!

如果您的计算机(上帝禁止)使用1的补码来表示负数,则在8位字节中的范围为-127到+ 127.从好的方面来说,你有两个不同的可能表示零...

但是,在现实世界中,你不太可能遇到一台补充计算机.


Joh*_*itb 6

认为 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)。