为什么p是=22而不是=21?
为什么p是=22而不是=21? 我认为是6+7+8=21.可是它编译出来是22.想不明白。。。。 本帖最后由 GH逐风 于 2017-1-21 22:04 编辑第一次:++b —— b = 6
第二次:++b —— b = 7
++b + ++b —— result = 7+7 = 14
第三次:++b —— b = 8
14 + ++b —— result = 22
这种是非法的,工作用这种是会被炒鱿鱼的。 纠结这类 ++ 问题没有意义,想知道为什么,看一下反汇编全明白了
GH逐风 发表于 2017-1-21 21:56
第一次:++b —— b = 6
第二次:++b —— b = 7
++b + ++b —— result = 7+7 = 14
那前两个为什么是7后一个为什么是8 了。这样的话应该是8+8+8?是因为编译器的问题吗? 童物联 发表于 2017-1-23 11:02
那前两个为什么是7后一个为什么是8 了。这样的话应该是8+8+8?是因为编译器的问题吗?
你真的要纠结这个问题吗?
学过汇编语言吗?
我简单说一下
q = (a++) + (a++) + (a++);
我的编译器是这样做的
q = a + a + a;
a++;
a++;
a++;
结果是q = 15
p = (++b) + (++b) + (++b);
我的编译器是这样做的
b++;
b++;
b++;
p = b + b + b;
结果是p = 24
详情请见我上面那张图
如果你想知道你的为什么是22,把你的反汇编代码贴出来(当然你也可以自己看,自己分析^_^)
说真的,纠结这类问题没有意义^_^
因为加是二元操作符,先读到++b和另一个++b,这时还没有把第一个++b的值放到eax,读完两个时,这时b的地址的值是7了,相加是14,储存在eax中,再加一个++b,就是14+8=22
页:
[1]