有点奇怪的是,C将字符常量视为int类型,而不是char类型。例如,在具有32位int和8位char的ASCII系统上,代码
char grade = 'B';
将'B'
表示为以32位为单位存储的数值66,但等级最终为以8位为单位的66。请解释一下这几行。
grade
的类型为char
,它是用int
类型的表达式初始化的。这是非常普通和合法的,并且int
值被隐式转换为类型char
。任何算术类型的值都可以隐式转换为任何其他算术类型。
这样的隐式转换是为什么在99%的情况下,字符常量是int
类型的事实不是问题;根据上下文适当地转换这样的常数。
(请注意,在C++中,字符常量的类型为char
。请记住,C和C++是两种不同的语言。)