Java中的运算符优先级(位移运算符):为什么以下输出为真?

时间:2014-02-23 21:03:04

标签: java bit-shift operator-precedence

这似乎是一个非常简单的问题,但我真的被卡住了。

e = 16 >> 1 >> 2 % 2 == 8

事实证明这是真的,但我不明白为什么。我知道我先做2%2 == 0然后接着是什么?

2 个答案:

答案 0 :(得分:4)

==(除了作业=之外)是最弱的绑定操作,因此您将16 >> 1 >> 0与8进行比较,即true

答案 1 :(得分:3)

正如您所说,首先评估2 % 2,然后留下16 >> 1 >> 0 == 8。接下来是第一个>>,当你右移16位时,你得到8.所以表达式变为8 >> 0 == 8

下一个运算符是剩余的>>,但是现在你正在向右移位,这当然没有改变;表达式为8 == 8。最后一个操作是==,当然返回true

请注意,当您将整数右移一位时,它与将其值减半相同(如果原始整数为奇数,则向下舍入)。无论你向右移动多少位,你都要多次减半。例如,64 >> 364 / 2 / 2 / 2相同,即8。