2

我是否正确地说以下每个定义中的基础对象表示(位模式)是相同的?

char c = 240;
unsigned char c = 240;
signed char c = 240;

那么,仅当在表达式(或强制转换)中使用签名时才重要?c

4

1 回答 1

2

signed char在一般情况下,如果 的范围不涵盖,则说模式相同是不正确的240。如果240超出范围,则此溢出初始化的结果是实现定义的(并可能产生信号,请参见 6.3.1.3/3)。char如果已签名,这同样适用于初始化。

该语言保证仅匹配signed char和范围的公共部分的表示unsigned char。例如,这保证产生相同的模式

char c = 10;
unsigned char c = 10;
signed char c = 10;

240一般情况下没有这样的保证(假设它超出范围)。

于 2012-11-30T07:57:39.047 回答