Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的运算符优先级(位移位运算符):为什么以下输出为真?_Java_Bit Shift_Operator Precedence - Fatal编程技术网

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:好的。你知道如何使用优先级规则在表达式中添加括号了吗?这正是我需要的!!谢谢你的好例子!这正是我需要的!!谢谢你的好例子!