2016-03-01 104 views
3
a += b != a & 1 

我在代码中遇到了这个声明,但我不确定代码的最后部分(!= a & 1)是什么。这是做什么的?b!= a&1做什么?

回答

6

首先你要咨询的语言规范,实现什么样的操作顺序在这里。带括号的推出,这将是:

a += (b != (a & 1)) 

a & 1是按位与(使它1如果a是奇数和0其他),那么它的结果相比,b和这个结果是布尔将被添加到a。当然,最新的有意义的a需要是一种可以支持的类型(例如,通过将True的值设为1False的值为0),该类型可以支持该类型。

概括起来讲,如果b==0会增加a如果a甚至如果b==1会增加a如果a是奇数。否则,如果b既不是0也不是1它将增加a

我注意到,一些意见没有注意到的优先顺序,甚至蟒蛇,他们有时会混淆(特别是如果你已经被那些由C混淆)。作为一个经验法则,我建议你明确地在子表达式的周围放置圆括号,如果你是最微弱的怀疑 - 甚至在分离的状态下分解它。通常情况下,编译器无论如何都会做到最好。

+0

代码有什么影响?尝试使用一些值,例如'a

+1

@PeterWood我已经更新了答案,'a'和'b'之间的关系是不相关的。相关的条件是“a”是偶数还是奇数,如果“b”是“0”还是“1”(或别的什么)。 – skyking

+0

如果b不等于0或1,a将始终递增。 –

相关问题