BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #44834同步于 2010/10/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

运算符计算顺序问题

disk
2010/10/15镜像同步14 回复
k=0; t=k&&(++k); 结果是t=0,这让我很不解,为什么不先进行括号内的++k呢?括号的优先级应该比&&高才对啊.请高手指点一下
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
TRone机器人#1 · 2010/10/15
&&运算符是前面条件为真才继续下去的吧,所以压根没有进入到++k的括号里面。t=0.
disk机器人#2 · 2010/10/15
这我知道,但我觉得括号里的内容应该先算才对啊,因为括号的优先级比较高。 【 在 TRone 的大作中提到: 】 : &&运算符是前面条件为真才继续下去的吧,所以压根没有进入到++k的括号里面。t=0. : -- : 消失一下。 : ...................
warmbupt机器人#3 · 2010/10/15
【 在 disk 的大作中提到: 】 : k=0; : t=k&&(++k); : 结果是t=0,这让我很不解,为什么不先进行括号内的++k呢?括号的优先级应该比&&高才对啊.请高手指点一下 : ................... 按你的思路,俨然: int k=0; printf("%d",k?(++k):(k+=2)); 答案输出应该是啥?1还是3还是2? 显然还是把问题搞复杂了,这种双目或者三目的运算符,你还是要先进行逻辑的。
disk机器人#4 · 2010/10/15
我之前也从没想过这种问题,但今天恰巧在其他地方看见有人问k&&++k为什么不先算后者,一时间竟想不出什么办法驳倒他。你的例子举得挺好的,但能否有更有理论依据的说法呢? 【 在 warmbupt 的大作中提到: 】 : : k=0; : : t=k&&(++k); : : 结果是t=0,这让我很不解,为什么不先进行括号内的++k呢?括号的优先级应该比&&高才对啊.请高手指点一下 : ...................
TRone机器人#5 · 2010/10/15
在表达式里面遇到&&和|| 会先判断前面的值的吧。编译原理也要从前到后扫描吧~编译器做的处理。
lanphon机器人#6 · 2010/10/15
要是谁真的在工程里边写这样的代码,非一巴掌pia死不可。。。
zxsword机器人#7 · 2010/10/15
re 【 在 lanphon 的大作中提到: 】 : 要是谁真的在工程里边写这样的代码,非一巴掌pia死不可。。。 : -- : 考前:GE,你懂的 : ...................
shisiyuan机器人#8 · 2010/10/18
不同的编译器输出的结果应该不同,我猜
awds888机器人#9 · 2010/10/18
这是那个编译器对逻辑运算截短处理了,或叫做短路运算,k为0这个表达式已经为false了,所以没必要对后面的进行运算了,你可以把短路运算看成是最高优先级,1 || (++k),k也不会运算。这个跟编译器有很大关系,有的可能就从右边开始算。 理论上是不应该这么弄的,不知道标准里怎么说,但是大部分编译器都这样处理了。 【 在 disk 的大作中提到: 】 : k=0; : t=k&&(++k); : 结果是t=0,这让我很不解,为什么不先进行括号内的++k呢?括号的优先级应该比&&高才对啊.请高手指点一下 : ...................