Java:为什么它被称为按位独占或?

时间:2014-02-18 08:06:09

标签: java bit-manipulation

我想了解bitwise exclusive or在java中是如何工作的。例如:

false ^ false = false
true ^ true = false  
true ^ false = true 
false ^ true = true

根据SO的一些帖子,java中boolean的大小依赖于jvm。通常,boolean可以在堆栈中用32 bits表示,数组中为8 bits

那么,如果它在堆栈上超过一个字节,为什么称它为bitwise

4 个答案:

答案 0 :(得分:7)

根据Java语言规范,没有布尔按位运算符,只有boolean logical operatorsinteger bitwise operators

  

<强> 15.22.1。整数按位运算符&amp;,^和|

     

当运算符&amp;,^或|的两个操作数时是一种类型   convertible(§5.1.8)到基本整数类型,二进制数字   促销首先在操作数上进行(§5.6.2)。

     

按位运算符表达式的类型是提升类型   操作数。

     

对于&amp ;,结果值是操作数值的按位AND。

     

对于^,结果值是操作数的按位异或   值。

     

对于|,结果值是操作数的按位包含OR   值。

     

<强> 15.22.2。布尔逻辑运算符&amp;,^和|

     

当&amp;,^或|的两个操作数时运算符的类型为boolean或   布尔值,然后按位运算符表达式的类型是布尔值。   在所有情况下,操作数都要进行拆箱转换(第5.1.8节)   必要时。

     

对于&amp ;,如果两个操作数值都为真,则结果值为true;   否则,结果是错误的。

     

对于^,如果操作数值不同,则结果值为true;   否则,结果是错误的。

     

对于|,如果两个操作数值都为false,则结果值为false;   否则,结果是真的。

答案 1 :(得分:4)

^运算符已重载。因此,如果您在原始布尔值上使用它,它就像逻辑XOR一样工作。

答案 2 :(得分:2)

按位是指所代表信息的大小。布尔值代表1位信息,即使它们可能需要超过1位才能保存在内存中。

答案 3 :(得分:2)

它被称为“按位”,因为它将逻辑XOR运算应用于两个操作数的位表示中的相应位置上的每对位(可以是任何数字,不仅是布尔值)。

以下是8位的简化示例:

9(00001001)^ 14(00001110)= 7(00000111)。