C和ASCII代码:如果范围从-128到127,128如何表示一个字符?

时间:2018-11-21 17:27:22

标签: c ascii

我之所以提到这个问题,是因为我不理解如果范围从-128到127,如何用带符号的char表示0到255的ASCII字符。

由于char = sizeof(char)= 1个字节,因此认为它可以轻松表示最大为255的值也很合理;

所以为什么赋值:char a = 128没什么错,也为什么我不应该使用unsigned char。

提前谢谢!

2 个答案:

答案 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个值。只是问我们如何使用它们。