主题:[讨论]大家来计算一个奇怪的表达式的值
p1s
[专家分:4100] 发布于 2007-02-16 14:54:00
表达式运行前i=2,j=3
求--j*5+(j==i)
VC6.0跑出来是11
但是为啥不先做括号呢?[em1][em1]
回复列表 (共11个回复)
沙发
p1s [专家分:4100] 发布于 2007-02-16 14:55:00
这题目我自己出的,昨天和人家讲着讲着就发现不对了
板凳
merry05 [专家分:8920] 发布于 2007-02-16 17:42:00
TC编译后,得数是15
3 楼
WinWing [专家分:3450] 发布于 2007-02-17 13:10:00
--和()是同级的吧,由左向右
先--j,j=2,(--j)=2
再(i==j), i=2,j=2,=>(i==j)=1
so:2*5+1=11...
4 楼
48121876 [专家分:50] 发布于 2007-02-21 19:58:00
新人的郁闷~~
5 楼
p1s [专家分:4100] 发布于 2007-03-02 11:30:00
[quote]--和()是同级的吧,由左向右
先--j,j=2,(--j)=2
再(i==j), i=2,j=2,=>(i==j)=1
so:2*5+1=11...[/quote]
在大多数语言中,括号的优先级始终应该是最高的
钱能的书上优先级也是如此
6 楼
merry05 [专家分:8920] 发布于 2007-03-02 23:18:00
编译器问题!
7 楼
廖增祥 [专家分:3930] 发布于 2007-03-04 00:24:00
依我看, 在写程序的时候尽量避开这种现象, 为了程序的逻辑正确性和可移植性, 哪怕是多定义几个变量也是值得的...
8 楼
p1s [专家分:4100] 发布于 2007-03-04 00:41:00
[quote]依我看, 在写程序的时候尽量避开这种现象, 为了程序的逻辑正确性和可移植性, 哪怕是多定义几个变量也是值得的...[/quote]
写程序的时候自然会按照正常的写
但是考试时候有这种题目就太恶心了……
9 楼
小令00 [专家分:1040] 发布于 2009-03-30 22:09:00
[quote][quote]--和()是同级的吧,由左向右
先--j,j=2,(--j)=2
再(i==j), i=2,j=2,=>(i==j)=1
so:2*5+1=11...[/quote]
在大多数语言中,括号的优先级始终应该是最高的
钱能的书上优先级也是如此[/quote]
我认为这里的
()并不是运算符
10 楼
廖增祥 [专家分:3930] 发布于 2009-08-31 14:09:00
[quote]--j*5+(j==i)
[/quote]
整体上看是两个表达式的加法,加法运算的结合性为 from left to right
那先算 --j * 5;
自减的优先级和乘法运算的优先级一样,先算自减,结果为 2, 此时 j 的值为 2
再乘上 5 的话,结果为 10, 再运算 j == i, 因为此时 i 和 j 都同时为 2, 故此表达式结果为 1
那最后结果即 10 + 1 = 11
我来回复