JavaScript字节逻辑

Nik*_*sev 4 javascript bitwise-operators

这个JavaScript代码是什么意思?

flag &= ~CONST
Run Code Online (Sandbox Code Playgroud)

它是追加,前置,交叉或其他什么?

ale*_*lex 8

看看Bitwise运算符.


和运营商

& 将1和两个操作数的位置为1.

10000001 & 00000001 = 00000001  
Run Code Online (Sandbox Code Playgroud)

〜运营商

~ 反转位.

~10000000 = 011111111;
Run Code Online (Sandbox Code Playgroud)

flag &= ~CONST是短手的flag = flag & ~CONST;.

您可能已经看到类似的东西,例如number *= 10.


War*_*rty 5

这将关闭任何常数代表.

例如,让我们看一个代表窗口状态的代码的假设示例:

WS_HASBORDER           = 0x01;
WS_HASCLOSEBUTTON      = 0x02;
WS_HASMINIMIZEBUTTON   = 0x04;
WS_HASMAXIMIZEBUTTON   = 0x08;
WS_ISMAXIMIZED         = 0x10;
Run Code Online (Sandbox Code Playgroud)

我们可以通过使用来表示窗口的"状态"
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
Run Code Online (Sandbox Code Playgroud)

_现在举个例子

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
Run Code Online (Sandbox Code Playgroud)

所以... windowState获取值0x1F

windowState&= ~WS_HASMAXIMIZEBUTTON

 WS_HASMAXIMIZEBUTTON: 0000 1000  
~WS_HASMAXIMIZEBUTTON: 1111 0111
Run Code Online (Sandbox Code Playgroud)

..完成我们的计算

             windowState
&) ~WS_HASMAXIMIZEBUTTON

becomes
    0001 1111
&)  1111 0111
-------------
    0001 0111 = 0x07
Run Code Online (Sandbox Code Playgroud)

以下是结果标志:
On:
WS_HASBORDER
WS_HASCLOSEBUTTON
WS_HASMINIMIZEBUTTON
WS_ISMAXIMIZED

关:
WS_HASMAXIMIZEBUTTON

希望有所帮助.回到拖延作业我去!哈哈.