【发布时间】:2015-01-16 03:48:05
【问题描述】:
我对 Java 中的 XOR 运算符 ^ 有一些疑问。
我一直认为 Java 没有逻辑 XOR 运算符,因为有几个人告诉我 ^ 是按位的。 今天我发现一些(未经证实的)帖子(没有来源)说 ^ 在 Java 中被重载,用作布尔值的逻辑 XOR 和按位 XOR,例如整数。
哪个陈述是正确的?谁能提供一些可靠的消息来源?
如果 ^ 被重载,它接受哪些类型?
【问题讨论】:
标签: java bit-manipulation xor
我对 Java 中的 XOR 运算符 ^ 有一些疑问。
我一直认为 Java 没有逻辑 XOR 运算符,因为有几个人告诉我 ^ 是按位的。 今天我发现一些(未经证实的)帖子(没有来源)说 ^ 在 Java 中被重载,用作布尔值的逻辑 XOR 和按位 XOR,例如整数。
哪个陈述是正确的?谁能提供一些可靠的消息来源?
如果 ^ 被重载,它接受哪些类型?
【问题讨论】:
标签: java bit-manipulation xor
Java Language Specification 定义
当运算符
&、^或|的两个操作数的类型为 可转换(第 5.1.8 节)为原始整数类型,二进制数字 首先对操作数执行提升(第 5.6.2 节)。按位运算符表达式的类型是 操作数。
- 对于
^,结果值是操作数值的按位异或。
和
当
&、^或|运算符的两个操作数都是boolean类型或Boolean,则按位运算符表达式的类型为boolean。 在所有情况下,操作数都需要进行拆箱转换(§5.1.8) 根据需要。
- 对于^,如果操作数值不同,结果值为
true; 否则,结果为false。
Java 中没有重载运算符的概念。
【讨论】:
^运算符,一个是位的,一个是逻辑的。
您应该将 ^ 视为按位异或。
您应该将布尔值视为 false=0 和 true=1 的单个位。
第二句话与您的问题有关,与像程序员一样思考也很重要!
【讨论】: