• 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
    
  • 相关阅读:
    RSA加密、解密、签名、验签的原理及方法
    typescript类
    typeScriptinterface和class区别
    Object.defineProperty
    vue源码学习实例挂载的实现
    typescript类型别名
    Spring.Day03.web集成
    Spring.Day04,数据响应方式
    MSSQL ( SQL Server )单用户模式的启用与停止(关闭)
    13.Redis数据迁移
  • 原文地址:https://www.cnblogs.com/ajanuw/p/13563896.html
Copyright © 2020-2023  润新知