这个按位运算符的实现有何意义?

时间:2014-06-03 01:39:54

标签: java swing operators bit-manipulation

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

name.getExtendedState()

它仍然有效?使用什么" getter" OR符号完成了吗?

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

来自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.

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

例如,如果NORMAL为10110且MAXIMIZED_BOTH为01100,那么两个就是1110

Normal  10110
MaxBoth 01100
Result  11110

答案 2 :(得分:0)

引自维基百科: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()返回一个由二进制标志组成的数字(即一个位字段)...对它进行OR算(使用管道运算符|),只需保留对象中的所有现有标志即可。 s状态和设置对应于状态JFrame.MAXIMIZED_BOTH的位。

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

希望有助于解释它。