【问题标题】:What is the | operator doing in Java?什么是|运算符在 Java 中做什么?
【发布时间】:2020-02-07 13:45:58
【问题描述】:

我阅读了一些 Java 代码并遇到了 | 运算符。 任何人都可以在这种情况下操作员在做什么?

for (int i=0; i<8; i++) {
            x[i] = hexBytes[i*4]   << 24
                 | hexBytes[i*4+1] << 16
                 | hexBytes[i*4+2] << 8
                 | hexBytes[i*4+3];
}

【问题讨论】:

    标签: java operators bit binary-operators


    【解决方案1】:

    这是按位或。有关详细信息,请参阅本文:https://www.baeldung.com/java-bitwise-operators

    3.1 指的是这个特定的运算符。也解释了左移&lt;&lt;操作符

    【讨论】:

    【解决方案2】:

    按位OR(和AND)可用于位处理。 AND 允许您提取一组位:int lowest8bits = 0xFFFFF &amp; 0xFF;

    使用OR,您可以插入位。在上面的代码中,将 4 个字节插入到同一个 int 中,方法是将它们移动到正确的位置并 ORing 它们。

                               10010010 byte
                      10010010 00000000 << 8
    00000000 00000000 00000000 00010110 The int we're building
    00000000 00000000 10010010 00010110 End result in int after OR
    

    【讨论】:

    • @MarkusPfeifenberger 速度无关紧要。你现在明白代码的作用了吗?
    • 并非所有细节。我必须通过文档和练习,更好地了解它在 Java 中的工作原理
    • 这与 Java 无关,它是基本的位处理,在 Java 代码中并不常见。
    • 谢谢。您添加的示例很好地描述了它。有什么有用的情况可以使用吗?
    • 可能不会。它用于低级位处理,因此除非您手动编写哈希函数或类似的东西,否则您可能不会经常使用它。
    【解决方案3】:

    使用的运算符有:

    1. “>>(右移)”:二进制右移运算符。左操作数的值向右移动由指定的位数 右操作数。
    2. "| (按位或)" :如果位存在于任一操作数中,则二元或运算符复制位。

    在您的代码中:

    hexBytes[i*4]   << 24
    

    hexBytes[i*4] 的二进制值左移 24 位。与其他人相同,结果是按位或 |运算符。

    【讨论】:

    • 谢谢。您的回答有助于我理解守则
    猜你喜欢
    • 2011-12-11
    • 2014-09-16
    • 2013-08-08
    • 2011-11-10
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多