有点奇怪,C把字符常量当作int类型而不是char类型。例如,对于一个32位int的ASCII系统和一个8位的字符,代码数据类型char的存储
char grade = 'B';
上表示'B'
为存储在32位的单元中的数值66,但级66卷起以8位单元存储。 请解释这一行。
有点奇怪,C把字符常量当作int类型而不是char类型。例如,对于一个32位int的ASCII系统和一个8位的字符,代码数据类型char的存储
char grade = 'B';
上表示'B'
为存储在32位的单元中的数值66,但级66卷起以8位单元存储。 请解释这一行。
grade
的类型为char
,它用int
类型的表达式初始化。这是完全普通和合法的,并且int
值被隐式转换为char
类型。任何算术类型的值都可以隐式转换为任何其他算术类型。
这样的隐式转换就是为什么99%的时间,字符常量的类型为int
的事实不成问题;根据情况适当地转换这些常量。
(请注意,在C++中字符常量是char
型的。请记住,C和C++是两种不同的语言。)
@PSkocik:感谢您的编辑。我知道我的意思,它与我的手指为我输入的内容不符。 –
这是C是如何工作的。字符常量按C标准有一个'int'类型。 –
不一定是8位uint。可能是其他宽度,也可能被烧焦,所有实现定义。 – user3528438
@ user3528438; OP表示“8位单元”,而不是“8位单元”,并明确声明*假设* int是32位,char是8位,并且系统使用ASCII。 –