C 知识量:16 - 74 - 317
通常,在语句和表达式中应当使用类型相同的变量和常量。但是,如果使用混合类型,C语言将会采用一套规则进行自动类型转换,具体规则为:
当类型转换出现在表达式时,无论是unsigned还是signed的char和short都会被自动转换成int,如有必要会被转换成unsigned int(如果short与int大小相同,unsigned short就比int大。此时,unsigned short会被转换成unsigned int)。由于都是从较小的类型转换成较大的类型,所以这些转换被称为升级。
涉及两种类型的运算,两个值会被分别转换成两种类型的更高级别。
类型的级别从高到低依次为:long double、double、float、unsigned long long、long long、unsigned long、long、unsigned int、int。例外情况是,当long与int大小相同时,unsigned int比long级别更高。没有列出short和char类型是因为它们已经被升级到int或unsigned int。
在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型。这个过程可能导致类型升级或降级。降级是指把一种类型转换成更低级别的类型。类型升级通常没有什么问题,但是类型降级会导致真正的麻烦,因为较低的类型可能放不下整个数字,导致数字被截断或精度受损。例如:将浮点数赋值给整数类型的变量,小数部分会被直接丢弃。
当作为函数参数传递时,char和short被转换成int,float被转换成double。
通常,应当避免自动类型转换,特别是类型降级。但是,有时需要手动进行精确的类型转换,这时可以使用强制类型转换运算符。具体做法是在要转换的量前面放置用圆括号括起来的类型名,该类型名就是希望转换成的目标类型。例如:
#include <stdio.h> int main(void) { int x, y; x = 1.4 + 1.9; y = (int) 1.4 + (int) 1.9; printf("x=%d \n", x); printf("y=%d \n", y); system("pause"); return 0; }
运行结果为:
x=3 y=2
对于x的值,在完成1.4与1.9相加后进行了自动类型转换。而对于y的值,先对1.4和1.9进行强制类型转换再计算加法。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6