JavaScript字节逻辑

时间:2010-10-22 06:15:47

标签: javascript bitwise-operators

这段JavaScript代码是什么意思?

flag &= ~CONST

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

2 个答案:

答案 0 :(得分:8)

请看Bitwise operators


&安培;操作者

&将1放在两个操作数位为1的位置。

实施例

10000001 & 00000001 = 00000001  

〜运算符

~将位反转。

实施例

~10000000 = 011111111;

flag &= ~CONSTflag = 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

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