【问题标题】:Pipe operator in java 7 [duplicate]java 7中的管道运算符[重复]
【发布时间】:2013-07-01 11:40:44
【问题描述】:

我最近在一个代码示例中看到了以下内容:

f.setExtendedState( f.getExtendedState()|JFrame.MAXIMIZED_BOTH );

其中 f 是一个 JFrame。这个管道运算符是如何调用的,它是做什么的,我在哪里可以找到有关它的文档?

谢谢 赫克托

【问题讨论】:

  • 投票关闭,因为它是重复的。
  • 对不起,伙计们,我没有意识到这是一个按位 XOR 运算符,这样使用它对我来说似乎很奇怪,但感谢您的回答

标签: java operators pipe


【解决方案1】:

| 运算符是 Java 中的 bitwise-or operator

如果在任一操作数(或两者)中设置了相应位,则按位或的结果是其中设置了位的值。

这里,这个操作使用JFrame.MAXIMIZED_BOTH(二进制,0000 0110)的值来保证倒数第二位和倒数第三位是开启的,一位是水平的,一位是垂直的。这使f.getExtendedState() 中的所有其他位保持不变。

【讨论】:

    【解决方案2】:

    |代表按位包含 OR 运算符。在此处查看详细信息:

    http://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html

    【讨论】:

      【解决方案3】:

      那个“管道”实际上是按位包含的或。 f.getExtendedState() 和 JFrame.MAXIMIZED_BOTH 可能是位域中的数字索引。使用“或”运算符将两者的属性组合为一个值。

      【讨论】:

      • 对我有用的答案。但是为什么需要进行按位运算来最大化 JFrame?我只使用 JFrame.MAXIMIZED_BOTH 测试了这个方法,它最大化了我的 JFrame。
      • f.getExtendedState() 返回该帧的当前状态,因此按位运算可以最大化它而不会破坏现有状态。仅使用 JFrame.MAXIMIZED_BOTH 会重置位域中的任何其他属性。
      【解决方案4】:

      管道 (|) 运算符只是 按位或 运算符。它将遍历两个数字的相应位,并且生成的数字将在两个输入位中的任何一个打开的位置都有一个打开位。在您给我们的情况下,该运算符用于向位域添加标志

      例如,如果您有一个数字 flags,(假设)是 4,它看起来像

      00000100b
      

      二进制。如果你|它与数字00010000b(16),结果是

      00010100b,
      

      其中包含原始标志(位位置 3)和新标志(位位置 5)。

      【讨论】:

        猜你喜欢
        • 2011-03-19
        • 2021-09-26
        • 2012-05-26
        • 2010-10-02
        • 1970-01-01
        • 2012-08-23
        • 2011-11-06
        • 2013-09-07
        相关资源
        最近更新 更多