C语言——表达式的求值

表达式求值有以下几种决定因素。

一、操作符优先级和结合性

类别  操作符  结合性 
后缀  () [] -> . ++ - -   从左到右 
一元  + - ! ~ ++ - - (type)* & sizeof  从右到左 
乘除  * / %  从左到右 
加减  + -  从左到右 
移位  << >>  从左到右 
关系  < <= > >=  从左到右 
相等  == !=  从左到右 
位与 AND  从左到右 
位异或 XOR  从左到右 
位或 OR  从左到右 
逻辑与 AND  &&  从左到右 
逻辑或 OR  ||  从左到右 
条件  ?:  从右到左 
赋值  = += -= *= /= %=>>= <<= &= ^= |=  从右到左 
逗号  从左到右 

计算9 + 2 * 3的值,由于*优先级高,所以先计算2 * 3,再计算9 + 6。

计算2 + 3 + 4的值,由于+与+优先级相同,+结合性是从左向右,所以先计算2 + 3,再计算5 + 4。

二、隐式类型转换

1、定义

隐式类型转换,也称作自动类型转换,是编程语言在表达式求值时自动进行的类型转换,目的是解决不同类型之间的操作。而这一过程是自动发生的,不需要程序员显式指定。编译器根据一定的规则自动进行类型的转换以适应操作的需要。

这些转换通常发生在以下几种情况:

  1. 算术运算中:当算术运算中的操作数类型不匹配时,例如一个int类型和一个float类型相加,较低精度的类型(这里是int)会自动转换为较高精度的类型(这里是float),以便进行计算。

  2. 赋值操作中:当将一个表达式的值赋给一个不同类型的变量时,如将float类型赋给int类型的变量,会进行类型转换。

  3. 函数参数中:当函数调用中实参与形参类型不一致时,实参将根据形参的类型自动转换。

  4. 条件表达式中:比如在比较不同类型的值时,较低等级的类型会提升为较高等级的类型再进行比较。

  5. 初始化时:如果初始化的值与变量类型不匹配时,如用一个double类型的值来初始化int类型的变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值