代码之家  ›  专栏  ›  技术社区  ›  Nikolay Frantsev

javascript字节逻辑

  •  4
  • Nikolay Frantsev  · 技术社区  · 14 年前

    这个javascript代码是什么意思?

    flag &= ~CONST
    

    它是附加、预处理、交集还是其他什么?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Warty    14 年前

    这将关闭任何常量表示的值。

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

    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
    

    所以…WindowsState获取值0x1F

    WindowsState&=~ws_HasMaximizeButton

     WS_HASMAXIMIZEBUTTON: 0000 1000  
    ~WS_HASMAXIMIZEBUTTON: 1111 0111
    

    …完成我们的计算

                 windowState
    &) ~WS_HASMAXIMIZEBUTTON
    
    becomes
        0001 1111
    &)  1111 0111
    -------------
        0001 0111 = 0x07
    

    下面是您的结果标志:
    关于:
    W-哈斯博德
    “关闭”按钮
    WS-HasMinimize按钮
    最大化

    关闭:
    ws撊hasMaximizeButton

    希望有帮助。回到拖拖拉拉的家庭作业上来!哈哈。

        2
  •  8
  •   alex    14 年前

    看看 Bitwise operators .


    &操作员

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

    例子

    10000001 & 00000001 = 00000001  
    

    ~操作员

    ~ 反转位。

    例子

    ~10000000 = 011111111;
    

    flag &= ~CONST 是为 flag = flag & ~CONST; .

    你可能见过类似的东西,例如 number *= 10 .