我想了解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
?
答案 0 :(得分:7)
根据Java语言规范,没有布尔按位运算符,只有boolean logical operators和integer 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)。