b!= a&1做什么?
答
首先你要咨询的语言规范,实现什么样的操作顺序在这里。带括号的推出,这将是:
a += (b != (a & 1))
的a & 1
是按位与(使它1
如果a
是奇数和0
其他),那么它的结果相比,b
和这个结果是布尔将被添加到a
。当然,最新的有意义的a
需要是一种可以支持的类型(例如,通过将True
的值设为1
和False
的值为0
),该类型可以支持该类型。
概括起来讲,如果b==0
会增加a
如果a
甚至如果b==1
会增加a
如果a
是奇数。否则,如果b
既不是0
也不是1
它将增加a
。
我注意到,一些意见没有注意到的优先顺序,甚至蟒蛇,他们有时会混淆(特别是如果你已经被那些由C混淆)。作为一个经验法则,我建议你明确地在子表达式的周围放置圆括号,如果你是最微弱的怀疑 - 甚至在分离的状态下分解它。通常情况下,编译器无论如何都会做到最好。
代码有什么影响?尝试使用一些值,例如'a
@PeterWood我已经更新了答案,'a'和'b'之间的关系是不相关的。相关的条件是“a”是偶数还是奇数,如果“b”是“0”还是“1”(或别的什么)。 – skyking
如果b不等于0或1,a将始终递增。 –