定义掩码

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

js 位掩码的更多相关文章

  1. Java位运算在程序设计中的使用:位掩码(BitMask)

    在Java中,位运算符有很多,例如与(&).非(~).或(|).异或(^).移位(<<和>>)等.这些运算符在日常编码中很少会用到. 在下面的一个例子中,会用到位掩码( ...

  2. 位掩码(BitMask)的介绍与使用

    一.前言 位运算在我们实际开发中用得很少,主要原因还是它对于我们而言不好读.不好懂.也不好计算,如果不经常实践,很容易就生疏了.但实际上,位运算是一种很好的运算思想,它的优点自然是计算快,代码更少. ...

  3. JS位运算和遍历

    JS位运算符 整数 有符号整数:允许使用正数和负数,第32位作为符号位,前31位才是存储位 无符号整数:只允许用正数 如果用n代表位 位数 = 2^n-1 由于位数(1.2.4.8.16...)中只有 ...

  4. Windows API 第16篇 GetLogicalDrivers 获取驱动器位掩码

    函数原型:DWORD GetLogicalDrives(VOID);The GetLogicalDrives function retrieves a bitmask representing the ...

  5. Java中的位掩码BitMask

    目录 JDK源码的使用 日常工作中的使用 JDK源码的使用 最近在JDK源码中闲逛,无意中看到了java.lang.reflect.Modifier这个类,这个类很简单,都是些常量定义和判断方法,于是 ...

  6. JS位操作符

    1.按位与 AND & var result = 25 & 3; alert(result); //1var result2 = 25 & -3;alert(result2); ...

  7. js 位运算符

    MDN定义:位运算符将它的操作数视为32位元的二进制串(0和1组成)而非十进制八进制或十六进制数. 例如:十进制数字9用二进制表示为1001,位运算符就是在这个二进制表示上执行运算,但是返回结果是标准 ...

  8. js位运算-按位非

    正数 取得二进制表示 取反(发现符号位是1,表示负数) 符号位不变,其余位取反 取反后加一 负数 取得负数的二进制表示(即绝对值的二进制反码加一) 取反即可

  9. Codeforces Round #626 Div2 D. Present(位掩码,二分)

    题目链接:https://codeforces.com/contest/1323/problem/D 题意:给了大小为4e5的数组a,其中1<=ai<=1e7.求所有点对和的异或和,即: ...

随机推荐

  1. centos6.5升级gcc 4.4.7为最新版4.9.1

    ==================本方法切实可行===桌面版不建议用.centos============================== 1.下载源码包 我的下载  gcc-4.9.1.tar ...

  2. 2019 ICPC Asia Nanjing Regional

    2019 ICPC Asia Nanjing Regional A - Hard Problem 计蒜客 - 42395 若 n = 10,可以先取:6,7,8,9,10.然后随便从1,2,3,4,5 ...

  3. P2764 最小路径覆盖问题 (最小点覆盖=顶点数-最大匹配)

    题意:最小路径覆盖 题解:对于一个有向图,最小点覆盖 = 顶点数 - 最大匹配 这里的最大匹配指的是将原图中每一个点拆成入点.出点, 每条边连接起点的出点和终点的入点 源点S连接每个点的出点,汇点T连 ...

  4. A. Crazy Town

    Crazy Town is a plane on which there are n infinite line roads. Each road is defined by the equation ...

  5. 迪杰斯特拉+拆点 Deliver the Cake - HDU 6805

    题意: t组输入,给你n个点m条边.你需要输出从s点到t点的最短距离,然后是m条边,每条边输入信息为: a,b,c 表示从a点到b点的一个无向边长度为c 每一个点会有一个属性L.R或M 如果a和b一个 ...

  6. Balanced Numbers SPOJ - BALNUM

    代码+注释 1 //我感觉这道题最扯的就是我因为输入而TLE了半天,懵逼死了,想破脑袋也没想到因为输入TLE了半天 2 //题意:求区间内数字满足"奇数各数出现偶数次,偶数各数出现奇数次&q ...

  7. C# 静态类 单例模式 对比

    公司的类都需要使用单例模式实现,这个可以节省资源,避免重复对象的生成.但是静态类也可以做到这一点,而且写起来更简洁,于是查阅相关资料,希望弄明白两者的差别. 1.单例模式可以在用到的时候初始化,而静态 ...

  8. codeforces 5E(非原创)

    E. Bindian Signalizing time limit per test 4 seconds memory limit per test 256 megabytes input stand ...

  9. C# 类(9) - 接口 Interface

    Interface 接口 类似 抽象类,也不能被实例化...(前面说的静态类,加上抽象类,还有这个,都3个了)接口其实比 抽象类 更加抽象.接口的方法(这个方法还不能有实体代码,和抽象类的抽象方法差不 ...

  10. Spring-cloud-netflix-hystrix

    服务注册中心eureka-server已经搭好,并且SPRING-CLOUD-NETFLIX-EUREKA-CLIENT-APPLICATION提供一个hello服务 畏怯还编写一个eureka-cl ...