c语言自增自减运算符问题
刚刚看了视频卡住了,在百度也没有搜到#include <stdio.h>
void main()
{
int a,b;
a = 3;
b = (++a)+(++a);
printf("%d\n%d\n",a,b);
}
结果为什么等于5,10呢,5我明白,10就不明白了,我想的结果是9,还有
如果把b=(++a)+(++a)+(++a)结果是16,为什么啊?
+++++++++++++++++++++++ b = (++a)+(++a);
这个是先算(++a)+(++a) 是4+5 ;
但是,由于4<5 计算机会把4变成5 ;
故、结果为10 。
So、你明白不 ? 我会了,谢谢,但是不是你这样解释 在同一个句子里面不要使用这么多的自增和自减,前缀自增就是先+1后执行,后缀自增就是先执行后+1,至于判定的地方,一般是在一个表达式后面的逗号或者是分号后面执行后缀自增。但是有的地方说不清楚,不同的系统和不同的编译器都不好说。
至于本题目里面,b的值其实很不确定,我的系统用vc++6.0算出来的是10,但是有的可能是9。在同一个语句里面预算一个变量两次自增以上就不好确定值了,因为你不知道系统是从左到右运算还是从右向左运算。
楼主尽量不要用这种方法。
本帖最后由 莫名其妙 于 2012-3-28 17:05 编辑
这++-- 真 让人头痛
汇编大妈查看如下
5: a = 3; 这里存放a的值
00401028 mov dword ptr ,3 这是赋值 a=3
6: b = (++a)+(++a);
这里暂时存放前一个a的值
0040102F mov eax,dword ptr
00401032 add eax,1 这里将 a自增
00401035 mov dword ptr ,eax自增后的结果给a a=4
这里暂时存放后一个a的值
00401038 mov ecx,dword ptr
0040103B add ecx,1 这里后面的a 自增
0040103E mov dword ptr ,ecx自增结果 给后面的a = 5
这里统一前后两个a的值 ( a的值取最后一次得出的a的值)
00401041 mov edx,dword ptr 这里将 a 统一等于5 参与运算
00401044 add edx,dword ptr a+a
莫名其妙 发表于 2012-3-28 16:56
这++-- 真 让人头痛
汇编大妈查看如下
懂了,谢谢指点{:10_281:}
页:
[1]