2017-02-09 86 views
-1

有点奇怪,C把字符常量当作int类型而不是char类型。例如,对于一个32位int的ASCII系统和一个8位的字符,代码数据类型char的存储

char grade = 'B'; 

上表示'B'为存储在32位的单元中的数值66,但级66卷起以8位单元存储。 请解释这一行。

+3

这是C是如何工作的。字符常量按C标准有一个'int'类型。 –

+0

不一定是8位uint。可能是其他宽度,也可能被烧焦,所有实现定义。 – user3528438

+1

@ user3528438; OP表示“8位单元”,而不是“8位单元”,并明确声明*假设* int是32位,char是8位,并且系统使用ASCII。 –

回答

1

grade的类型为char,它用int类型的表达式初始化。这是完全普通和合法的,并且int值被隐式转换为char类型。任何算术类型的值都可以隐式转换为任何其他算术类型。

这样的隐式转换就是为什么99%的时间,字符常量的类型为int的事实不成问题;根据情况适当地转换这些常量。

(请注意,在C++中字符常量是char型的。请记住,C和C++是两种不同的语言。)

+1

@PSkocik:感谢您的编辑。我知道我的意思,它与我的手指为我输入的内容不符。 –