【问题标题】:How does the implementation of this bitwise operator make sense?这个按位运算符的实现有什么意义?
【发布时间】:2014-07-23 05:44:18
【问题描述】:

在较早的question 关于如何最大化 JFrame 中,我看到了这段代码并且它有效。我拿出了

name.getExtendedState()

它仍然有效吗? “getter”和 OR 符号的用途是什么?

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

【问题讨论】:

    标签: java swing operators bit-manipulation


    【解决方案1】:

    使用name.getExtendedState()|JFrame.MAXIMIZED_BOTH 意味着您将添加 MAXIMIZED_BOTH 到现有的扩展状态。如果你说only JFrame.MAXIMIZED_BOTH,这意味着你替换扩展状态只有那个位,并丢弃当前扩展状态中的任何东西。

    【讨论】:

    • 但这不是必需的,对吧?我把它拿出来,一切都很好,花花公子。对我来说似乎很臃肿。
    • 在此特定实例中(并且仅在此特定实例中),您设置MAXIMIZED_BOTH,您可以安全地清除其他位,因为唯一的其他有一点是ICONIFIED,将其设置为MAXIMIZED_BOTH 没有意义。但是,假设您实际上是在尝试设置MAXIMIZED_HORIZ,而MAXIMIZED_VERT 已经设置,那么您的方法会无意中清除MAXIMIZED_VERT,这可能会让用户感到惊讶。
    【解决方案2】:

    来自 API getExtendedState():

    Gets the state of this frame. The state is represented as a bitwise mask.
    NORMAL 
    Indicates that no state bits are set.
    ICONIFIED
    MAXIMIZED_HORIZ
    MAXIMIZED_VERT
    MAXIMIZED_BOTH 
    Concatenates MAXIMIZED_HORIZ and MAXIMIZED_VERT.
    

    逻辑或将返回值与JFrame.MAXIMIZED_BOTH的值组合

    例如,如果 NORMAL 是 10110 并且 MAXIMIZED_BOTH 是 01100,则两者的 ORing 将得到 1110

    Normal  10110
    MaxBoth 01100
    Result  11110
    

    【讨论】:

      【解决方案3】:

      引自维基百科:http://en.wikipedia.org/wiki/Bitwise_operation#OR

      按位 OR 采用两个长度相等的位模式并执行 对每对对应位进行逻辑包含 OR 操作。这 如果第一位为 1 或第二位,则每个位置的结果为 1 为 1 或两个位均为 1;否则,结果为 0。例如:

         0101 (decimal 5)
      OR 0011 (decimal 3)
       = 0111 (decimal 7)
      

      因此,如果 getExtendedState() 返回一个由二进制标志组成的数字(即一个位字段)... ORing 它(使用管道运算符 | ),只是将所有现有标志保持在对象的状态和 也设置对应状态JFrame.MAXIMIZED_BOTH的bit/s。

      这是因为如果在第一个操作数或第二个操作数中为 1,则 ORing 会将某个位设置为 1。

      希望这有助于解释它。

      【讨论】:

        猜你喜欢
        • 2020-11-20
        • 1970-01-01
        • 2016-03-07
        • 1970-01-01
        • 2010-12-30
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        相关资源
        最近更新 更多