表达式求值

表达式求值的顺序一部分是由操作符的优先级和结合性决定,同样,有些表达式的操作数在求值的过程中可能需要准换为其它类型。

隐式类型转换:C的整型算术运算总是至少以缺省类型的精度来进行的,为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整形,这种转换称为整形提升。

如:char a,b,c; a=b+c;b和c的值被提升为普通整形,然后在执行加法运算。

加法运算完成之后,结果将被截断,然后在存储于a中。

如:a=(~a^b<<1)>>1;

在求补和左移操作时,8位的精度是不够的,标准要求进行完整的整型求值,所以对于这类表达式的结果,是不会存在歧义的,所以我们不用进行整形提升。

算术转换:如果某个操作数的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行 。

操作符的属性:复杂表达式的求值应该遵循这三个规则,造作符的优先级,操作符的结合性,是否控制求值顺序。两个相邻的操作符先执行哪个,取决于他们的优先级,如果两者的优先级相同,则取决于他们的结合性。   

我们不能写出依赖求值顺序的表达式,这样的表达式是不可移植的,比如说,我们不能写出这样的表达式,c+--c,因为我们没有办法知道,+操作符的左操作数的获取在右操作数之前还是之后求值,所以结果是不可预测的。

我们不能写出依赖求值顺序的表达式,这样的表达式是不可移植的,是有歧义的。

int:默认是有符号的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值