为什么C和C++中的signed char范围不同?

Dev*_*ngh -1 c c++11

为什么signed charC和C++ 的范围不同?在C中,范围是-128 t0 127和C++中的"-127到127",但另一方面,无符号范围是相同的.为什么?

eer*_*ika 11

你误会了.在两种语言中,signed char 的保证最小值实际上是-127.自C11标准(草案N1570):

请注意,实际绝对最小值是实现定义的,可能更大:

......它们的实现定义值的大小(绝对值)应等于或大于显示的值,并带有相同的符号.

在具有8位字节和2位补码表示(相当常见)的处理器上,C和C++中的最小值几乎肯定是-128.仅保证-127的原因是因为它允许支持非二进制补码表示.


Fan*_*Fox 5

注释中引用的文本指的是c++标准不指导如何实现signed char 的事实,即.它可以实现为1的补码,为您提供值-127 - > 127(带+0和-0).

由8位字节表示的256个值可以解释为值0到255或者值-127到127.不,不是-128到127正如人们所期望的那样:c ++标准留下了一些赞美硬件的可能性并消除了一个值,因此使用-128是不可移植的.

它没有说char是-127 - > 127,它说它可能是.是的,如果您希望在每个标准符合系统中都具有可移植性,则需要考虑1的补码实现的可能性char.实际上,没有人有这个......

您应该更担心一些硬件如何实现16位字符...