C / C ++底层表示char,unsigned char和signed char

时间:2012-11-30 07:50:09

标签: c++ c char undefined-behavior integer-overflow

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

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

那么,只有在表达式(或强制转换)中使用c时,签名 -ness才有意义?

1 个答案:

答案 0 :(得分:2)

一般情况下,如果signed char的范围未覆盖240,则说明模式相同是不正确的。如果240超出范围,则此溢出初始化的结果是实现定义的(并且可能导致信号,请参见6.3.1.3/3)。如果char初始化,则同样适用于signed char初始化。

该语言仅为unsigned charchar c = 10; unsigned char c = 10; signed char c = 10; 范围的公共部分保证匹配表示。例如。这保证产生相同的模式

240

对于{{1}},一般情况下没有这样的保证(假设它超出范围)。