鱼C论坛

 找回密码
 立即注册
查看: 1627|回复: 16

C语言求助!谢谢解答!

[复制链接]
发表于 2015-7-10 15:01:24 | 显示全部楼层 |阅读模式

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

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

x
我不太懂那个结果q=22?而不是等于q=6+7+8=21
2345截图20150710145603.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-10 16:23:45 | 显示全部楼层
7+7+8 = 22
编译器优化问题
一看就知道是我大天朝的题目。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-11 10:43:01 | 显示全部楼层
哥斯拉不说话 发表于 2015-7-10 16:23
7+7+8 = 22
编译器优化问题
一看就知道是我大天朝的题目。

大天朝?什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-11 15:39:03 | 显示全部楼层
小阿妞 发表于 2015-7-11 10:43
大天朝?什么意思?

这道题是专门拿出来坑人的。。。。实际中千万别这么写,会死的很惨。。。
q = ++j;
q += (++j);
q += (++j);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-12 08:09:15 | 显示全部楼层
musilintan 发表于 2015-7-11 15:39
这道题是专门拿出来坑人的。。。。实际中千万别这么写,会死的很惨。。。
q = ++j;
q += (++j);

当j=5时候,q=6
q+=7不也应该是q=6+7=13 ?
q+=8不事q=13+8=21 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-12 08:10:29 | 显示全部楼层
哥斯拉不说话 发表于 2015-7-10 16:23
7+7+8 = 22
编译器优化问题
一看就知道是我大天朝的题目。

能具体点么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-12 09:59:12 | 显示全部楼层
小阿妞 发表于 2015-7-12 08:09
当j=5时候,q=6
q+=7不也应该是q=6+7=13 ?
q+=8不事q=13+8=21 ?

对啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-12 10:08:47 | 显示全部楼层

编译器会给你一个优化, 这是编译器的问题,不同的编译器可能会有不同的结果,比如你用 vc 就会显示出22,换一个别的,就可能是 21, 具体的就要反汇编了,通过汇编代码就会发现 5+1=6, 6+1=7, 7+7=14, 7+1=8, 14+8=22,就是这样算出来的。
360截图20150712100458012.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-12 11:32:59 | 显示全部楼层
小阿妞 发表于 2015-7-12 08:09
当j=5时候,q=6
q+=7不也应该是q=6+7=13 ?
q+=8不事q=13+8=21 ?


1.按照常理应该是这样的:
q = (++j) + (++j) + (++j);
因为++的符号优先级别高,会先将所有的++执行完毕后再执行+运算。
q = 8 + 8 + 8;
q = 24;
这是正常解法。
2.编译器不支持8+8+8这样的运算,他有自己个性的算法。
q = (++j) + (++j) + (++j);
他会将上面的表达式理解为:
q = ((++j) + (++j)) + (++j);
q = (7 + 7) + (++j);
q = (7 + 7) + 8;
q = 22;
在平时使用的过程中,尽量不要让++多次用到一个表达式里面,每个编译器都有自己的个性算法,指不定就给你算出个奇葩的数据,到时候出了异常,你连哭的地方都没有。。。节哀。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2015-7-12 11:38:30 From FishC Mobile | 显示全部楼层
不同的编译器可能给出不同的结果,一行语句最好只有一个++或--
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-13 01:09:01 | 显示全部楼层
唉……汇编好重要啊!
看来要C和汇编一起学了
:dizzy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-13 12:30:42 | 显示全部楼层
mse9591 发表于 2015-7-13 01:09
唉……汇编好重要啊!
看来要C和汇编一起学了

还跑去学汇编,不吐学三升算你好的了,你还不如跟c++一起学呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-13 13:08:08 | 显示全部楼层
nin98 发表于 2015-7-13 12:30
还跑去学汇编,不吐学三升算你好的了,你还不如跟c++一起学呢

:funk:有那么恐怖么……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-13 14:09:52 | 显示全部楼层
7 + 7 + 8
自己反汇编看看吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-13 20:05:25 | 显示全部楼层
牡丹花下死做鬼 发表于 2015-7-13 14:09
7 + 7 + 8
自己反汇编看看吧

这个会被编译优化。
估计这妹子是才学编程的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-13 20:41:55 | 显示全部楼层
无名侠 发表于 2015-7-13 20:05
这个会被编译优化。
估计这妹子是才学编程的。

对的 我这边是 7 + 7 + 8
就为了这个我还特意发过帖子 结果...... 发帖之前啊就不能搜索下论坛么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-13 23:38:45 From FishC Mobile | 显示全部楼层
牡丹花下死做鬼 发表于 2015-7-13 20:41
对的 我这边是 7 + 7 + 8
就为了这个我还特意发过帖子 结果...... 发帖之前啊就不能搜索下论坛么

这妹纸学习好勤奋。新一代大神正在萌芽中。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 03:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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