鱼C论坛

 找回密码
 立即注册
查看: 4454|回复: 5

[已解决]关于j=5,q=(++j)+(++j)+(++j)得22的问题

[复制链接]
发表于 2017-12-21 16:31:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大神,int j=5,q;
                  q = (++j)+(++j)+(++j);
                  printf("%d,%d\n",q,j);
为什么q是22而不是21呢?
我的算法是q=6+7+8
我算了一下int j=5,q;
                  q = (++j)+(++j);
                  printf("%d,%d\n",q,j);
这里q是14而不是q=6+7=13。
算不明白了
最佳答案
2017-12-21 16:37:26
本帖最后由 BngThea 于 2017-12-21 16:38 编辑

首先回答 q = (++j)+(++j); 为什么是14
因为会先执行两个括号里面的自增,得到 j==7
所以结果为14

然后来看 q = (++j)+(++j)+(++j); 为什么是22
因为编译器会自作聪明的进行“优化”
先将某两个进行结合 q = (++j)+ ((++j)+(++j));
完成两个里面的计算得到 j = 7,q = (++j) + 14;
所以结果为22

最后,强烈不推荐这样写代码,一是不同编译器可能会输出不同结果,二是代码可读性极差
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-21 16:37:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 BngThea 于 2017-12-21 16:38 编辑

首先回答 q = (++j)+(++j); 为什么是14
因为会先执行两个括号里面的自增,得到 j==7
所以结果为14

然后来看 q = (++j)+(++j)+(++j); 为什么是22
因为编译器会自作聪明的进行“优化”
先将某两个进行结合 q = (++j)+ ((++j)+(++j));
完成两个里面的计算得到 j = 7,q = (++j) + 14;
所以结果为22

最后,强烈不推荐这样写代码,一是不同编译器可能会输出不同结果,二是代码可读性极差
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-21 16:42:24 | 显示全部楼层
BngThea 发表于 2017-12-21 16:37
首先回答 q = (++j)+(++j); 为什么是14
因为会先执行两个括号里面的自增,得到 j==7
所以结果为14

受教了,谢谢大神,回复真快~!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-21 16:50:33 | 显示全部楼层
BngThea 发表于 2017-12-21 16:37
首先回答 q = (++j)+(++j); 为什么是14
因为会先执行两个括号里面的自增,得到 j==7
所以结果为14

也就是说优化是指q = (++j)+(++j)+(++j),不同时执行三个括号里的自增,j==8,q=8+8+8=24,先对两个结合运算之后再自增,对吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-21 17:01:09 | 显示全部楼层
fairylee83 发表于 2017-12-21 16:50
也就是说优化是指q = (++j)+(++j)+(++j),不同时执行三个括号里的自增,j==8,q=8+8+8=24,先对两个结合运 ...

你可以这样理解
编译器的行为有时候并不会像你想象的那样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-10 16:39:57 | 显示全部楼层
BngThea 发表于 2017-12-21 16:37
首先回答 q = (++j)+(++j); 为什么是14
因为会先执行两个括号里面的自增,得到 j==7
所以结果为14

请问为什么 q = (++j)+(++j)=14,不应该是6+6=12吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 03:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表