我正在阅读 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)。

C和C ++中的字符类型

从阅读中可以看出它可能是其中任何一种,具体取决于实施。

因为标准没有提及关于char类型的任何内容,所以“char”指的是可以是:

  1. " unsigned char" (0-255)在某些编译器上(例如:针对ARM处理器的TexasInstruments编译器--OMAP系列)

  2. " signed char" (-128-127)大多数编译器(gcc,MSVC ......)

  3. 为了确保您总是有一个明确定义的范围,您应该使用“signed char”;或“unsigned char”。

感谢Roddy和Esteban Brenes的回复。

这是我目前的理解:

有三种可能性。如果值表示为无符号,则char的范围为0到255.如果值以二进制补码表示,则char的范围为-128到127.最后,如果值表示为带符号的补码一个char的范围从-127到127.这最后的可能性表明,与前两个实现的256个可能值相比,只有255个可能的值,但是这没有考虑到一个补码表示中的负零。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top