我之所以提到这个问题,是因为我不理解如果范围从-128到127,如何用带符号的char表示0到255的ASCII字符。
由于char = sizeof(char)= 1个字节,因此认为它可以轻松表示最大为255的值也很合理;
所以为什么赋值:char a = 128没什么错,也为什么我不应该使用unsigned char。
提前谢谢!
答案 0 :(得分:2)
char c = 128;
本身在C中是正确的。该标准说char
包含CHAR_BIT
位,该位可以大于8。此外,char
可以是有符号或无符号,实现已定义,并且unsigned char
必须至少包含[0,255]范围。
因此,char
大于8位或默认情况下char
是无符号的实现,此行有效且相关。
即使在常见的8位带符号的char
实现中,该表达式在如何将128
转换为适合char
的方式上也定义良好,因此没有问题
在实际情况下,编译器通常会发出警告,例如clang:
warning: implicit conversion from 'int' to 'char' changes value from 128 to -128 [-Wconstant-conversion]
。
答案 1 :(得分:-1)
有符号或无符号-需要8位。 8位可以包含256个值。只是问我们如何使用它们。