文章目录
  1. 1. 类型转换
    1. 1.1. 隐式转换

Burt Ward Robin

类型转换

计算机执行算术运算,通常要求操作数有相同的大小(即位数量相同),并且要求存储的方式也相同。

计算机不能直接将16位整数和32位3整数相加,也不能直接将32位整数和32位浮点数相加。

隐式转换

C语言允许在表达式中混合使用基本类型。在单个表达式中可以组合整数、浮点数、甚至是字符。当然,在这种情况下需要C编译器可能需要生成一些指令将某些操作数换成不同类型,因为编译器可以自动处理这些转换而无需程序员介入,所以这类转换称为隐式转换 implicit conversionC语言还允许程序员使用强制运算符执行显示转换 explicit conversion

当发生下列情况时会进行隐式转换

  1. 常用算术转换
  • 任意操作数的类型是浮点类型的情况

任意操作数的类型是浮点类型的情况

如果一个操作数的类型是long double那么另外一个操作数的类型转换成long double类型。

否则,如果一个操作数是的类型为double类型,那么另外一个操作数转化成double类型

否则,如果一个操作数是float类型,那么把另外一个操作数转化为float类型。

注意这些规则涵盖了混合整数和浮点类型的情况,例如把一个操作数的类型是long int类型,并且另一个操作数的类型是double类型,那么把long int类型的操作数转化为double类型


  • 两个操作数的类型都不是浮点类型的情况

    首先对两个操作数进行整体值提升(保证没有一个操作数是字符类型或短整形)。然后按照下图对类型较狭小的操作数进行提升:

2个操作数的类型都不是浮点数的情况

有一种特殊情况,只有在long int类型和 unsigned int类型长度(比如32位)相同时才回发生。在这类型情况下,如果一个操作数的类型是long int,而另外一个的类型是unsigned int,那么两个操作数都会转化为unsigned long int 类型。

文章目录
  1. 1. 类型转换
    1. 1.1. 隐式转换