高二小女子问各位大哥哥一个问题,i=1;((i++)*(i++))=?
物理吧
全部回复
仅看楼主
level 1
auxiliary
楼主
RT
i=1;
((i++)*(i++))的答案据说是2
运算顺序是怎样的呢??
谢谢各位大哥哥咩~
2012年03月12日 11点03分
1
level 10
AngelloverLXD
2012年03月12日 11点03分
2
level 11
小强大战胡萝卜
i赋值1
i放入操作数寄存器a
i自增1(此时i=2了)
结果寄存器=a*i(就是1*2了)
i自增1(此时i=3了)
无论i如何,反正结果寄存器是2了
i++和++i的不同在汇编时不同
2012年03月12日 11点03分
3
level 11
小强大战胡萝卜
小女子。。。
2012年03月12日 11点03分
4
level 10
CODE_UNKNOWN
貌似见过LZ啊,签名是八月社的女角
还小女子,难道LZ是可爱的男孩子?
2012年03月12日 11点03分
5
level 1
auxiliary
楼主
(i++)*(i++)
不是应该先运算,再+1吗??
为什么不是1*1=1
然后
i=i+1;
i=i+1;//i这时等于3??
2012年03月12日 13点03分
6
level 11
joy12_
这……高中不是只学VB么……
action script无力啊……
2012年03月12日 13点03分
7
level 7
悲しみが積もる
2吧
原理就像3L说的,因为加了括号,没有歧义,也不会因为编译器不同结果不同,就像i+++++i这样的悲剧。。。。
最后一个i++的时候,只是用上了i+1之前的i也就是2,用完之后i自加1,所以最后答案是1*2=2,i=3
2012年03月12日 13点03分
8
level 11
小强大战胡萝卜
C规定i++是先引用在自增,结合加法指令的执行顺序,大概这样比较靠谱吧,编译的规则应该是比较固定的。不同的编译器到底如何编译,你最好核实一下。
2012年03月12日 13点03分
9
level 8
兰帕德德德
同高二,在研究学考科目!主要是地理
2012年03月12日 13点03分
10
level 12
跳水の兔
中二帝自重……
2012年03月12日 13点03分
11
level 9
小小豆-
妹纸
2012年03月12日 13点03分
12
level 14
★深蓝之泪★
通俗的来说,在一条语句中改变一个变量的值两次或两次以上,属于未定义行为。具体的运算结果可能因编译器的不同而不同,一般来说应当在编程中避免这种情况。
详细资料请参考:《C A Reference Manual Fifth Edition》:
中文版对照(机械工业出版社):
2012年03月12日 13点03分
13
level 1
auxiliary
楼主
额,也只能这样理解了。。。
2012年03月12日 14点03分
14
level 9
ちいさな夢
用eclipse测试了下 java中的编译结果是2
2012年03月12日 14点03分
15
level 1
auxiliary
楼主
原来如此,好高端。。。
2012年03月12日 14点03分
16
level 9
ちいさな夢
winTC编译出来是1
果然这种式子还是尽量别出现的好
2012年03月12日 14点03分
17
level 14
★深蓝之泪★
话说现在高二有C语言课?
2012年03月12日 14点03分
18
level 1
auxiliary
楼主
呵呵,可以自学咧~
2012年03月12日 14点03分
19
level 7
贫僧一声吼
妹子求粉
2012年03月12日 15点03分
20
1
2
尾页