zoukankan      html  css  js  c++  java
  • js 位掩码

    定义掩码

    const mask0 = parseInt("00000001", 2);
    const mask1 = parseInt("00000010", 2);
    const mask2 = parseInt("00000100", 2);
    const mask3 = parseInt("00001000", 2);
    const mask4 = parseInt("00010000", 2);
    const mask5 = parseInt("00100000", 2);
    const mask6 = parseInt("01000000", 2);
    const mask7 = parseInt("10000000", 2);
    

    flags数据

    let valueFlags = 1;
    

    检测掩码

    console.assert(valueFlags & mask0);
    

    设置掩码flags

    valueFlags |= (mask0 | mask1); // valueFlags = valueFlags | (mask0 | mask1)
    console.assert(valueFlags & mask0 && valueFlags & mask1);
    
    valueFlags |= mask7; // valueFlags = valueFlags | mask7
    console.assert(valueFlags & mask7)
    

    重设(删除)掩码

    valueFlags &= ~mask1; // valueFlags = valueFlags & ~mask1
    console.assert( !(valueFlags & mask1) )
    
    
    if (
      valueFlags & mask0 &&
      valueFlags & mask7 &&
      !(valueFlags & mask1) &&
      !(valueFlags & mask2) &&
      !(valueFlags & mask3) &&
      !(valueFlags & mask4) &&
      !(valueFlags & mask5) &&
      !(valueFlags & mask6)
    ) {
      console.log("success");
    }
    

    切换状态

    valueFlags ^= mask0;
    console.assert(!(valueFlags & mask0));
    
    valueFlags ^= mask0;
    console.assert(valueFlags & mask0);
    

    某些API可能将信息储存在指定位

    // 从低位到高位,index从0开始
    const value = parseInt('1000000000000000000000000000000010000000000000001000000000000000', 2);
    
    // 检测第15位上是否设置了标志
    console.assert( value & (1 << 15) )
    
    // 检测第31位上是否设置了标志
    console.assert( value & (1 << 31) )
    
    // 检测第63位上是否设置了标志
    console.assert( value & (1 << 63) )
    

    在flags中取出指定位数据

    let valueFlags = mask0 | mask1 | mask2;
    
    console.log(valueFlags.toString(2)); // 111
    console.log((valueFlags & (1 << 1)) === mask1); // true
    console.log((valueFlags >> 1 & 1)); // 1 or 0
    
  • 相关阅读:
    EF 关系规则(一对一、一对多、多对多...)
    EF框架中加子类后出现列名 'Discriminator' 无效问题
    .net下Ueditor配置(主要讲解上传功能配置)
    同构数查找程序的优化过程 Anthony
    Effective STL 条款17 Anthony
    C 语言中的数组类型和数组指针类型. Anthony
    Effective STL 条款18 Anthony
    RDLC之自定義數據集二
    给Calendar添加标签
    Profile学习
  • 原文地址:https://www.cnblogs.com/ajanuw/p/13563896.html
Copyright © 2011-2022 走看看