小阿妞 发表于 2015-7-10 15:01:24

C语言求助!谢谢解答!

我不太懂那个结果q=22?而不是等于q=6+7+8=21

哥斯拉不说话 发表于 2015-7-10 16:23:45

7+7+8 = 22
编译器优化问题
一看就知道是我大天朝的题目。

小阿妞 发表于 2015-7-11 10:43:01

哥斯拉不说话 发表于 2015-7-10 16:23
7+7+8 = 22
编译器优化问题
一看就知道是我大天朝的题目。

大天朝?什么意思?

musilintan 发表于 2015-7-11 15:39:03

小阿妞 发表于 2015-7-11 10:43
大天朝?什么意思?

这道题是专门拿出来坑人的。。。。实际中千万别这么写,会死的很惨。。。
q = ++j;
q += (++j);
q += (++j);

小阿妞 发表于 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 ?

小阿妞 发表于 2015-7-12 08:10:29

哥斯拉不说话 发表于 2015-7-10 16:23
7+7+8 = 22
编译器优化问题
一看就知道是我大天朝的题目。

能具体点么?

哥斯拉不说话 发表于 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 ?

对啊

哥斯拉不说话 发表于 2015-7-12 10:08:47

小阿妞 发表于 2015-7-12 08:10
能具体点么?

编译器会给你一个优化, 这是编译器的问题,不同的编译器可能会有不同的结果,比如你用 vc 就会显示出22,换一个别的,就可能是 21, 具体的就要反汇编了,通过汇编代码就会发现 5+1=6, 6+1=7, 7+7=14, 7+1=8, 14+8=22,就是这样算出来的。

musilintan 发表于 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;
在平时使用的过程中,尽量不要让++多次用到一个表达式里面,每个编译器都有自己的个性算法,指不定就给你算出个奇葩的数据,到时候出了异常,你连哭的地方都没有。。。节哀。。。

风之残月 发表于 2015-7-12 11:38:30

不同的编译器可能给出不同的结果,一行语句最好只有一个++或--

mse9591 发表于 2015-7-13 01:09:01

唉……汇编好重要啊!
看来要C和汇编一起学了
:dizzy:

nin98 发表于 2015-7-13 12:30:42

mse9591 发表于 2015-7-13 01:09
唉……汇编好重要啊!
看来要C和汇编一起学了

还跑去学汇编,不吐学三升算你好的了,你还不如跟c++一起学呢

mse9591 发表于 2015-7-13 13:08:08

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

:funk:有那么恐怖么……

牡丹花下死做鬼 发表于 2015-7-13 14:09:52

7 + 7 + 8
自己反汇编看看吧

无名侠 发表于 2015-7-13 20:05:25

牡丹花下死做鬼 发表于 2015-7-13 14:09
7 + 7 + 8
自己反汇编看看吧

这个会被编译优化。
估计这妹子是才学编程的。

牡丹花下死做鬼 发表于 2015-7-13 20:41:55

无名侠 发表于 2015-7-13 20:05
这个会被编译优化。
估计这妹子是才学编程的。

对的 我这边是 7 + 7 + 8
就为了这个我还特意发过帖子 结果...... 发帖之前啊就不能搜索下论坛么

无名侠 发表于 2015-7-13 23:38:45

牡丹花下死做鬼 发表于 2015-7-13 20:41
对的 我这边是 7 + 7 + 8
就为了这个我还特意发过帖子 结果...... 发帖之前啊就不能搜索下论坛么

这妹纸学习好勤奋。新一代大神正在萌芽中。。。
页: [1]
查看完整版本: C语言求助!谢谢解答!