【问题标题】:Bitwise XOR java long按位异或 java long
【发布时间】:2014-05-04 07:01:19
【问题描述】:

我在 Ubuntu 12.04 上使用 Oracle Java 7.51,并尝试这样做

long a = 0x0000000080000001 ^ 0x4065DE839A6F89EEL;
System.out.println("result "+ Long.toHexString(a));

Output: result bf9a217c1a6f89ef

但我希望结果是4065de831a6f89ef,因为 ^ 运算符在 Java 中是按位异或。我读错了 Java 规范的哪一部分?

【问题讨论】:

    标签: java long-integer xor


    【解决方案1】:

    你需要一个L 在第一个整数文字的末尾:

    long a = 0x0000000080000001L ^ 0x4065DE839A6F89EEL;
    

    否则它是 int 文字,而不是 long(忽略前导零)。 ^ 运算符然后将第一个操作数值从 0x80000001 提升为 long,但由于设置了符号位,因此提升的结果为 0xFFFFFFFF80000001L。

    【讨论】:

    • 谢谢您的解释。由于 Eclipse 并没有因为我没有在第一个字面值中添加尾随 L 而标记我,所以我认为我是绿色的。
    • @Soham - 是的,你必须小心那些前导零;它们对我们人类的意义大于对 Java 编译器的意义 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 2015-11-22
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多