c语言不同数据类型之间的运算(隐式转换、整型提升、强制类型转换、不同类型之间的运算)

一、整型提升

       整型提升C程序设计语言中的一项规定:在表达式计算时,各种整形首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。

上面的官方描述可以概括如下两点:

1.一个表达式中用到了整型值,那么类型为char、short int活整型位域(这几者带符号或无符号均可)的变量,以及枚举类型的对象,都可以被放在这个整型变量的位置。

2. 如果1)中的变量的原始类型值域可以被int表示,那么原值被转换为int;否则的话,转为unsigned int。

即字符型、short、int及枚举类型在参与运算的时候,都会转换成int类型进行运算,如果int类型不足以表示则转换成unsigned int类型。

可以使用以下程序进行验证

二、隐式转换

1.隐式转换

c语言在以下几种情况下会进行隐式转换

1、算术运算式中,低类型能够转换为高类型。

       例:int + char  +double运算的结果应该为double类型

2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。

       例:int  =  float + char,表达式的右边char 类型和float类型进行运算进行隐式转换为float类型,在将float类型转换为int类型赋值给表达式左边的int类型变量。

3、函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。

4、函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。

2.算术运算的隐式转换

转换规则如下

1、字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) 。

 2、short型转换为int型(同属于整型) 。

3、float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) 。其次,有下面的规则。

同时,算术运算中不同类型之间的运算也遵循隐式转换规则和整型提升规则。

C语言算术运算中的转换规则

3.强制类型转换

       强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用制类型转换运算符来把值显式地从一种类型转换为另一种类型。

       例:float b = 15.0;int a = (int)b;

4.强制类型转换和隐式转换的区别

        强制类型转换可以将任意类型转换成其他类型,可以有程序员自己决定;隐式转换是C语言中的一种运算规则,它在不同的情景下有不同的表述,一般的隐式类型转换只能将小类型转换成较大类型的,具体还要根据问题另行讨论。

三、不同数据类型之间的运算

       不同数据之间的运算,实际上都是在隐式转换和整型提升规则基础之上进行运算。例如:

     

猜你喜欢

转载自blog.csdn.net/qq_47406941/article/details/112707018