Java中的运算符优先级(位移位运算符):为什么以下输出为真?
在你看来,这可能是一个非常简单的问题,但我真的被卡住了Java中的运算符优先级(位移位运算符):为什么以下输出为真?,java,bit-shift,operator-precedence,Java,Bit Shift,Operator Precedence,在你看来,这可能是一个非常简单的问题,但我真的被卡住了 e = 16 >> 1 >> 2 % 2 == 8 事实证明这是真的,但我不明白为什么。我知道我首先做的是2%2==0,但是接下来呢 ==远离赋值=最弱的绑定操作,因此您有16>>1>>0,与8相比,这是真的。==远离赋值=最弱的绑定操作,因此您有16>>1>>0,与8相比,这是真的。如您所说,首先计算2%2,留下16>>1>>0==8。接下来是第一个>>,当您将16右移一位时,将得到8。因此表达式变成8>>0==
e = 16 >> 1 >> 2 % 2 == 8
事实证明这是真的,但我不明白为什么。我知道我首先做的是2%2==0,但是接下来呢 ==远离赋值=最弱的绑定操作,因此您有16>>1>>0,与8相比,这是真的。==远离赋值=最弱的绑定操作,因此您有16>>1>>0,与8相比,这是真的。如您所说,首先计算2%2,留下16>>1>>0==8。接下来是第一个>>,当您将16右移一位时,将得到8。因此表达式变成8>>0==8
下一个运算符是剩余的>>,但现在您正右移零位,这当然不会改变任何内容;表达式是8==8。最后一个操作是==,它当然返回true
请注意,当您将整数右移一位时,如果原始整数为奇数,则与将其值减半并向下舍入相同。无论右移的位数是多少,都必须将其减半很多次。例如,64>>3与64/2/2/2相同,后者是8。正如您所说,首先计算2%2,留下16>>1>>0==8。接下来是第一个>>,当您将16右移一位时,将得到8。因此表达式变成8>>0==8
下一个运算符是剩余的>>,但现在您正右移零位,这当然不会改变任何内容;表达式是8==8。最后一个操作是==,它当然返回true
请注意,当您将整数右移一位时,如果原始整数为奇数,则与将其值减半并向下舍入相同。无论右移的位数是多少,都必须将其减半很多次。例如,64>>3与64/2/2/2相同,后者是8。首先查看,查看优先级表:,然后在表达式中添加括号。然后我们再谈;这是一道考试题,就像那样,对不起。我已经读过优先规则了…@Yoana:好的。您知道如何使用优先级规则向表达式中添加括号了吗?首先看一看,看一看优先级表:,然后向表达式中添加括号。然后我们再谈;这是一道考试题,就像那样,对不起。我已经读过优先规则了…@Yoana:好的。你知道如何使用优先级规则在表达式中添加括号了吗?这正是我需要的!!谢谢你的好例子!这正是我需要的!!谢谢你的好例子!