【问题标题】:Java XOR Operator questionsJava XOR 运算符问题
【发布时间】:2015-01-16 03:48:05
【问题描述】:

我对 Java 中的 XOR 运算符 ^ 有一些疑问。

我一直认为 Java 没有逻辑 XOR 运算符,因为有几个人告诉我 ^ 是按位的。 今天我发现一些(未经证实的)帖子(没有来源)说 ^ 在 Java 中被重载,用作布尔值的逻辑 XOR 和按位 XOR,例如整数。

哪个陈述是正确的?谁能提供一些可靠的消息来源?

如果 ^ 被重载,它接受哪些类型?

【问题讨论】:

    标签: java bit-manipulation xor


    【解决方案1】:

    Java Language Specification 定义

    当运算符 &^| 的两个操作数的类型为 可转换(第 5.1.8 节)为原始整数类型,二进制数字 首先对操作数执行提升(第 5.6.2 节)。

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

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

    &^| 运算符的两个操作数都是boolean 类型或 Boolean,则按位运算符表达式的类型为boolean。 在所有情况下,操作数都需要进行拆箱转换(§5.1.8) 根据需要。

    • 对于^,如果操作数值不同,结果值为true; 否则,结果为false

    Java 中没有重载运算符的概念。

    【讨论】:

    • 我认为将操作符称为“重载”只是一个一般概念是可以的。但是你当然不能像在 C++ 或其他一些语言中那样自己重载运算符。
    • @ajb IMO 如果它不在语言术语中。在谈论语言时,我会避免使用它。 Java中有两个^运算符,一个是位的,一个是逻辑的。
    【解决方案2】:

    您应该将 ^ 视为按位异或。

    您应该将布尔值视为 false=0 和 true=1 的单个位。

    第二句话与您的问题有关,与像程序员一样思考也很重要!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-20
      • 2013-04-20
      • 2012-09-12
      • 2011-07-21
      • 2011-04-15
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多