C/C++ 字符、无符号字符和有符号字符的基础表示形式

C/C++ underlying representation of char, unsigned char and signed char

本文关键字:字符 表示 符号 C++ 无符号      更新时间:2023-10-16

我可以说以下每个定义中的底层对象表示(位模式)是相同的吗?

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

那么,只有当表达式(或强制转换)中使用c时,符号性才重要?

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

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

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

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