这似乎是一个非常简单的问题,但我真的被卡住了。
e = 16 >> 1 >> 2 % 2 == 8
事实证明这是真的,但我不明白为什么。我知道我先做2%2 == 0然后接着是什么?
答案 0 :(得分:4)
==
(除了作业=
之外)是最弱的绑定操作,因此您将16 >> 1 >> 0
与8进行比较,即true
。
答案 1 :(得分:3)
正如您所说,首先评估2 % 2
,然后留下16 >> 1 >> 0 == 8
。接下来是第一个>>
,当你右移16位时,你得到8.所以表达式变为8 >> 0 == 8
。
下一个运算符是剩余的>>
,但是现在你正在向右移位,这当然没有改变;表达式为8 == 8
。最后一个操作是==
,当然返回true
。
请注意,当您将整数右移一位时,它与将其值减半相同(如果原始整数为奇数,则向下舍入)。无论你向右移动多少位,你都要多次减半。例如,64 >> 3
与64 / 2 / 2 / 2
相同,即8。