我提到这个问题是因为我无法理解如果范围是从-128到127,如何用有符号字符表示从0到255的ASCII字符。
由于 char = sizeof(char)= 1 个字节,因此有理由认为它可以轻松表示最大 255 的值;
那么为什么赋值:char a = 128 没有任何错误,为什么我不应该使用 unsigned char 呢。
提前谢谢您!
最佳答案
char c = 128;
本身在 C 中是正确的。标准规定 char
包含 CHAR_BIT
位,该位可以更大大于 8。此外,char
可以是有符号或无符号的,由实现定义,并且 unsigned char
必须至少包含范围 [0, 255]。
因此,如果 char
大于 8 位,或者 char
默认情况下是无符号的,则此行是有效且相关的。
即使在常见的 8 位有符号 char
实现中,表达式仍然明确定义了如何将 128
转换为适合 char
,所以没有问题。
在实际情况下,编译器通常会发出警告,例如 clang :
警告:从“int”到“char”的隐式转换会将值从 128 更改为 -128 [-Wconstant-conversion]
。
关于C 和 ASCII 代码 : how could 128 represents a char if it's range is from -128 to 127?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53417590/