回 帖 发 新 帖 刷新版面

主题:[讨论]大家来计算一个奇怪的表达式的值

表达式运行前i=2,j=3
求--j*5+(j==i)
VC6.0跑出来是11
但是为啥不先做括号呢?[em1][em1]

回复列表 (共11个回复)

沙发

这题目我自己出的,昨天和人家讲着讲着就发现不对了

板凳

TC编译后,得数是15

3 楼

--和()是同级的吧,由左向右
先--j,j=2,(--j)=2
再(i==j), i=2,j=2,=>(i==j)=1
so:2*5+1=11...

4 楼

新人的郁闷~~

5 楼

[quote]--和()是同级的吧,由左向右
先--j,j=2,(--j)=2
再(i==j), i=2,j=2,=>(i==j)=1
so:2*5+1=11...[/quote]
在大多数语言中,括号的优先级始终应该是最高的
钱能的书上优先级也是如此

6 楼

编译器问题!

7 楼

依我看, 在写程序的时候尽量避开这种现象, 为了程序的逻辑正确性和可移植性, 哪怕是多定义几个变量也是值得的...

8 楼

[quote]依我看, 在写程序的时候尽量避开这种现象, 为了程序的逻辑正确性和可移植性, 哪怕是多定义几个变量也是值得的...[/quote]
写程序的时候自然会按照正常的写
但是考试时候有这种题目就太恶心了……

9 楼

[quote][quote]--和()是同级的吧,由左向右
先--j,j=2,(--j)=2
再(i==j), i=2,j=2,=>(i==j)=1
so:2*5+1=11...[/quote]
在大多数语言中,括号的优先级始终应该是最高的
钱能的书上优先级也是如此[/quote]

我认为这里的
()并不是运算符

10 楼

[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

我来回复

您尚未登录,请登录后再回复。点此登录或注册