这段JavaScript代码是什么意思?
flag &= ~CONST
它是追加,前置,交叉还是其他什么?
答案 0 :(得分:8)
&
将1放在两个操作数位为1的位置。
10000001 & 00000001 = 00000001
~
将位反转。
~10000000 = 011111111;
flag &= ~CONST
是flag = flag & ~CONST;
的简写。
你可能已经看过类似的东西,例如number *= 10
。
答案 1 :(得分:5)
这将关闭任何常数代表。
例如,让我们看一个代表窗口状态的代码的假设示例:
WS_HASBORDER = 0x01;
WS_HASCLOSEBUTTON = 0x02;
WS_HASMINIMIZEBUTTON = 0x04;
WS_HASMAXIMIZEBUTTON = 0x08;
WS_ISMAXIMIZED = 0x10;
我们可以用左代表窗口的“状态”
windowState = WS_HASBORDER | WS_HASCLOSEBUTTON | ... etc
现在,假设我们要“关闭”其中一个状态,那就是你的示例代码所做的......
windowState &= ~WS_HASBORDER
现在上面的代码做了什么,它是否得到了赞美[我想你可以称之为反转位],无论它是什么,WS_HASBORDER。
所以.. WS_HASBORDER有一位已打开,其他所有内容都已关闭。除了之前被关闭的一位之外,它的所有位都被打开了。
由于我已将多个常量表示为字节,我只会向您展示一个示例[不是javascript不代表数字作为字节,也不能这样做]
WS_HASBORDER = 0x01; //0000 0001
WS_HASCLOSEBUTTON = 0x02; //0000 0010
WS_HASMINIMIZEBUTTON = 0x04; //0000 0100
WS_HASMAXIMIZEBUTTON = 0x08; //0000 1000
WS_ISMAXIMIZED = 0x10; //0001 0000
_现在举个例子
windowState = WS_HASBORDER | WS_HASCLOSEBUTTON | WS_HASMINIMIZEBUTTON |
WS_HASMAXIMIZEBUTTON | WS_ISMAXIMIZED;
0000 0001
0000 0010
0000 0100
0000 1000
and) 0001 0000
--------------
0001 1111 = 0x1F
所以... windowState获取值0x1F
windowState& = ~WS_HASMAXIMIZEBUTTON
WS_HASMAXIMIZEBUTTON: 0000 1000
~WS_HASMAXIMIZEBUTTON: 1111 0111
..完成我们的计算
windowState
&) ~WS_HASMAXIMIZEBUTTON
becomes
0001 1111
&) 1111 0111
-------------
0001 0111 = 0x07
以下是您的结果标志:
开:
WS_HASBORDER
WS_HASCLOSEBUTTON
WS_HASMINIMIZEBUTTON
WS_ISMAXIMIZED
关:
WS_HASMAXIMIZEBUTTON
希望有所帮助。回到拖延作业我去!哈哈。