C语言:类型转换
总阅读次
类型转换
计算机执行算术运算,通常要求操作数有相同的大小(即**位数量
相同),并且要求存储的方式
**也相同。
计算机不能直接将16位整数和32位3整数相加,也不能直接将32位整数和32位浮点数相加。
隐式转换
C语言允许在表达式中混合使用基本类型。在单个表达式中可以组合整数、浮点数、甚至是字符。当然,在这种情况下需要C编译器可能需要生成一些指令将某些操作数换成不同类型,因为编译器可以自动处理这些转换而无需程序员介入,所以这类转换称为**隐式转换
** implicit conversionC语言还允许程序员使用强制运算符执行**显示转换
** explicit conversion
当发生下列情况时会进行隐式转换
- 常用算术转换
- 任意操作数的类型是浮点类型的情况
如果一个操作数的类型是long double那么另外一个操作数的类型转换成long double类型。
否则,如果一个操作数是的类型为double类型,那么另外一个操作数转化成double类型
否则,如果一个操作数是float类型,那么把另外一个操作数转化为float类型。
注意这些规则涵盖了混合整数和浮点类型的情况,例如把一个操作数的类型是long int类型,并且另一个操作数的类型是double类型,那么把long int类型的操作数转化为double类型
- 两个操作数的类型都不是浮点类型的情况
首先对两个操作数进行整体值提升(保证没有一个操作数是字符类型或短整形)。然后按照下图对类型较狭小的操作数进行提升:
有一种特殊情况,只有在long int类型和 unsigned int类型长度(比如32位)相同时才回发生。在这类型情况下,如果一个操作数的类型是long int,而另外一个的类型是unsigned int,那么两个操作数都会转化为unsigned long int 类型。