C语言中char与short的隐式类型转换是否等级相同?
C语言隐式类型转换常见问题解答
char和short的类型等级是否相同?
没错,C标准里把char(含signed char、unsigned char)和short(含unsigned short)归为同一类型等级,它们都属于整数类型里等级较低的梯队。
等级相同就代表二者之间没有隐式转换吗?
当然不是,隐式转换依然存在:
- 当
char和short一起做算术运算时,会先触发整数提升:只要int能装下原类型的所有值(绝大多数平台都满足),它们都会被自动转成int再运算。 - 赋值的时候也会有隐式转换:比如把
char的值赋给short变量,会自动把1字节的值扩展成2字节(带符号的话会填充符号位);反过来把short赋给char,则会截断成1字节的值。
为什么字节大小不同,类型等级却相同?
类型等级是C标准为隐式转换规则制定的逻辑优先级,和类型的实际字节数没直接关系。
这个划分的核心是为了统一小整数类型的提升逻辑:char和short都属于“需要被提升为更大整数类型(一般是int)”的小类型,所以被归为同一等级——不管它们的字节数差多少,只要都属于需要被提升的范畴,就会被放在同一梯队里。
内容的提问来源于stack exchange,提问作者sai praveen
相关产品推荐
相关产品推荐

