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
    
  • 相关阅读:
    Medium | LeetCode 148. 排序链表 | 归并排序(递归)
    Hard | LeetCode 4. 寻找两个正序数组的中位数 | 二分法
    Medium | LeetCode 341. 扁平化嵌套列表迭代器 | 递归 | 栈
    Hard | LeetCode 312. 戳气球 | 递归+记忆化数组 | 动态规划
    如何删除万能输入法
    javaweb 怎么获取路径
    Controller 返回 json那些小事
    螺旋矩阵
    javaweb怎么使用html
    tomcat中文乱码
  • 原文地址:https://www.cnblogs.com/ajanuw/p/13563896.html
Copyright © 2011-2022 走看看