复合运算符可能产生的结果

原题: C语言程序设计_现代方法, 第四章练习题10.

表达式(i++) + (i--)共有多少种可能的值, 假设i初始值为1

 

影响结果的因素: 双目运算符的两个操作数表达式优先级没有在标准C中定义, 所以, 针对不同实现(不同的编译器)可能会产生不同结果

 

后缀自增运算符的运算机制: 标准C没有定义后缀自增运算符具体的运算时机, 但是, 能够保证在下一个表达式运算之前, 使其值自增.

 

需要理解的概念: 任何一个操作数自身也是一个表达式.

 

因此, 在(i ++) + (i --)这个表达式中, 可能产生不同的因素只有双目运算符+一个.

 

结果1: 双目运算符左操作数表达式首先进行运算.

i ++ = 1

i = 2  /*在+号右操作数(i --)运算之前, i完成左操作数指定的自增.*/

i -- = 2

i = 1 /*在双目操作符+号运算之前, i完成右操作数指定的自增*/

(i ++) + (i --) = 1 + 2 = 3;

 

结果2: 双目运算符右操作数表达式首先进行运算.

i -- = 1

i = 0 /*在+号做操作数(i ++)运算之前, i完成右操作数指定的自增.*/

i ++ = 0

i = 1 /*在双目操作符+号运算之前, i完成左操作数指定的自增*/

(i ++) + (i --) = 1 + 0 = 1;

 

两种可能产生的结果中, 在运算完成后, i的值都是1, 因为在表达式中, 有副作用的++和--会互相"抵消".

 

暂时的理解就是这些, 如果还有可能产生不同结果的其他影响因素, 请看到的朋友mailto: lgg860911@yahoo.com.cn 交流学习.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值