如何做形如k=(i++)+(++i)+(++i)的c语言题呢

首先,我不会汇编语言,也没有进入反编译参看它具体是如何进行运算的。我这里写出来只是一个总结,或者说碰到这样的题,我们该如何写出这个结果。

下面我主要分析的还是在VC下进行:

void main()
{

  int i=5;
  int k;
    k=(i++)+(++i)+(i++);//6+6+6=18
//	k=(++i)+(++i)+(++i) ;//7+7+8=22
//	k=(i++)+(i)+(i++);//5+5+5=15
//	k=(i++)+(++i)+(++i);//6+6+7=19	
//	k=(i++)+(i++)+(++i);//5+5+6=16
//	k=(i++)+(++i)+(i++);//6+6+6=18
//	k=(++i)+(++i);//7+7=14
//	k=(++i)+(i++)+(i++)+(i++);//6+6+6+6=24
//	k=(i++)+(i)+(++i);//5+5+6=16
	printf("%d %d",k,i);
}
上面的代码给出了计算测试的结果,我们并对结果进行了分析,尽管这种分析可能是错误的,但是我们在上述的测试中都通过了验证。


1、首先我们看第一个 k=(i++)+(++i)+(i++);我们先在计算这个表达式上遵循两个原则:1)加号和自加运算符的优先级原则。2)从左到右两两相加的原则。

那么对于上式我们分两步进行运算先计算(i++)+(++i)的结果,然后在计算该结果和最后一个(i++)相加的结果。在第一步中,我们先考虑优先级的原则即++和+号的优先级,加号的两边一个是i++一个是++i,先后对这两个运算后,i的结果为6,然后在计算中间的加号即为6+6=12,此时i为6。我们将同样的运算法则应用到对最后一个元素的加法,此时i先运算i++,因为是后加所以此时i的值并不改变任然为6,故k=6+6+6=18。对于i的结果,就是不管是前增运算还是后增运算,因为都是运算完输出,所以i的只加三次1,即为8.


转载于:https://www.cnblogs.com/raby/p/5886711.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值