js中的位运算符 ,按位操作符
按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制、十六进制或八进制数值。例如,十进制数9,用二进制表示则为1001。按位操作符操作数字的二进制形式,但是返回值依然是标准的JavaScript数值。
| 位运算符 | 名称 | js内使用方式 | 操作作用 | 应用举例 | 
|---|---|---|---|---|
| & | 按位与 | a & b | 对每对比特位执行与(AND)操作。只有两者互相对应的比特位都是 1 时,a & b的对应比特位才是 1 | a&1 判断一个整数的奇偶 | 
| | | 按位或 | a | b | 对每一对比特位执行或(OR)操作。如果两者互相对应的比特位中都至少有一个是 1,则a | b的对应比特位是 1。 | 
 a|1 把这个数强行变成最接近的偶数; 将任一数值 x 与 0 进行按位或操作,其结果都是 x; 将任一数值 x 与 -1 进行按位或操作,其结果都为 -1  | 
| ^ | 按位异或 | a ^ b | 对每一对比特位执行异或(XOR)操作。如果两者互相对应的比特位都不同,则a ^ b的对应比特位是 1。 | 两次异或同一个数最后结果不变 (a ^ b) ^ b = a | 
| ~ | 按位取反 | ~a | 
 对每一个比特位执行非(NOT)操作。NOT a 结果为 a 的反转(即反码); 即把0和1全部取反  | 
 if (~str.indexOf(searchFor)) { else {  | 
| << | 左移 | a << b | 将 a 的二进制形式向左移 b (< 32) 比特位,右边用0填充。 | |
| >> | 带符号右移 | a >> b | 将 a 的二进制表示向右移 b (< 32) 位,丢弃被移出的位。 | 相当于a除以2的b次方(取整) | 
| >>> | 无符号右移 | a>>> b |  将 a 的二进制表示向右移 b (< 32) 位,丢弃被移出的位,并使用 0 在左侧填充。 | 
自动化掩码创建
function createMask () {
    var nMask = 0, nFlag = 0, nLen = arguments.length > 32 ? 32 : arguments.length;
    for (nFlag; nFlag < nLen; nMask |= arguments[nFlag] << nFlag++);
    return nMask;
}
var mask1 = createMask(true, true, false, true); // 11, i.e.: 1011
var mask2 = createMask(false, false, true); // 4, i.e.: 0100
var mask3 = createMask(true); // 1, i.e.: 0001
// etc.
alert(mask1); // 打印 11
逆算法:从掩码得到布尔数组
function arrayFromMask (nMask) {
    // nMask 必须介于 -2147483648 和 2147483647 之间
    if (nMask > 0x7fffffff || nMask < -0x80000000) { 
        throw new TypeError("arrayFromMask - out of range"); 
    }
    for (var nShifted = nMask, aFromMask = []; nShifted; 
    aFromMask.push(Boolean(nShifted & 1)), nShifted >>>= 1);
    return aFromMask;
}
var array1 = arrayFromMask(11);
var array2 = arrayFromMask(4);
var array3 = arrayFromMask(1);
alert("[" + array1.join(", ") + "]");
// 打印 "[true, true, false, true]", i.e.: 11, i.e.: 1011
参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators
js中的位运算符 ,按位操作符的更多相关文章
- Java 逻辑运算符、位运算符、移位操作符    总结(Java 学习中的小记录)
		
Java 逻辑运算符.位运算符.移位操作符 总结 作者:王可利(Star·星星) 逻辑运算符,表格如下: 解析逻辑运算符表: 1.与 (&) 特点:两个都为真的时候,结果为真.两个为 ...
 - JS中的各类运算符
		
2020-04-15 JS中的各类运算符 // 假设有如下代码,那么a(10)的返回结果是?( ) function a(a) { a^=(1<<4)-1; return a; } // ...
 - js中的等值运算符(抽象相等==与严格相等===的区别)
		
js中的等值运算符 js中的相等分为抽象相等和严格相等,他们有什么区别呢. 在说具体算法前,先提下JS数据类型,JS数据类型分为6类:Undefined Null String Number Bool ...
 - JS中的逻辑运算符&&、||,位运算符|,&
		
1.JS中的||符号: 运算方法: 只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值. 只要“||”前面为true,不管“||”后面是true还是fals ...
 - js中的instanceof运算符
		
概述 instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 语法 obj instanceof Object;//true 实例obj ...
 - JS所包含的大纲内容,以及JS中数据类型、运算符的介绍
		
JavaSctipt javascript:1.特效2.表单验证 原理:何时?1.找到标签 何时?2.操作标签 写在那里? 内联(行内)(不推荐直接写js代码,经常写方法调用) 写在标签里面,以属性的 ...
 - js中的内部属性与delete操作符
		
本文正式地址:http://www.xiabingbao.com/javascript/2015/08/03/javascript-delete-configurable 在讲解Configurabl ...
 - JS中的加号+运算符详解
		
加号+运算符 在 JavaScript 中,加法的规则其实很简单,只有两种情况: 把数字和数字相加 把字符串和字符串相加 所有其他类型的值都会被自动转换成这两种类型的值. 为了能够弄明白这种隐式转换是 ...
 - js中的逗号运算符
		
逗号运算符 逗号运算符是二元运算符,它的操作数可以是任意类型.它首先计算左操作数,然后计算右操作数,最后返回右操作数的值,用逗号运算符可以在一条语句中执行多个运算 作用: 1.在一条语句中从左到右执行 ...
 - JS中关于比较运算符的问题(a===b)
		
之前也会碰到a===b和a==b的表达式,但都没有仔细的看资料,今天看canvas有关的书中提到了,就mark一下: a == b 说明:a与b相等: a ===b 说明:a与b相同,并且类型 ...
 
随机推荐
- Angular12 学习angular2前的热身准备
			
1 ECMA European Computer Manufactures Association 这个组织的目标是评估,开发和认可电信和计算机标准. 百度百科:点击前往 ECMA65:满足ECMA标 ...
 - [原创]SQL 表值函数:获取从今天计算起往前自定义天数
			
PS:此博文是利用Windows Live Writer 2012编写,格式效果可能不太好. 在我开发过程中,遇到一个统计需求,结果是要求返回从当天起往回推算出自定义输入的天数 为此我写了一个表值函数 ...
 - 2.XML实体注入漏洞攻与防
			
XML实体注入基础 当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件.执行系统命令.探测内网端口.攻击内网网站等危害. 简单了解XML以后,我们知道要在XML中使用特殊字符,需要使用实体字符 ...
 - Qt5编译项目出现GL/gl.h:No such file or directory错误
			
编译在Ubuntu12.04下安装了Qt5.1.1,在编译工程的时候出现了如下错误:“GL/gl.h:No such file or directory”,查了一下资料发现这个问题由于系统中没有安装O ...
 - 用js正则判断输入的两位字符,第一位是数字16进制的,第二位是I、O、Q、U除外的字母(A到Z)
			
项目中遇到客户的需求变化,要验证某个数据的正确性,判断输入的两位字符,第一位是数字16进制的,第二位是I.O.Q.U除外的字母(A到Z). 本来对js不熟练,网上参考了一下js正则验证的规则,使用正则 ...
 - 最短路——弗洛伊德算法(floyd)
			
模板: #include <bits/stdc++.h> using namespace std; ][]; int n,m,x,z,y; <<; int main() { c ...
 - bzoj3876: [Ahoi2014&Jsoi2014]支线剧情(上下界费用流)
			
传送门 一道题让我又要学可行流又要学zkw费用流…… 考虑一下,原题可以转化为一个有向图,每次走一条路径,把每一条边都至少覆盖一次,求最小代价 因为一条边每走过一次,就要付出一次代价 那不就是费用流了 ...
 - 洛谷P3396 哈希冲突(分块)
			
传送门 题解在此,讲的蛮清楚的->这里 我就贴个代码 //minamoto #include<iostream> #include<cstdio> #include< ...
 - Docker Flie
			
七.Docker File .dockeringore:打包忽略的文件列表,每行写一个文件的路径,可使用通配符 FROM指令:指定基础镜像 FROM <repository>[:<t ...
 - JMETER断言:终极指南
			
你想要: 检查服务器响应是否包含特定字符串, 或验证服务器返回了HTTP 200 OK, 或者检查json字段的值(使用类似JsonPath$.store..price). 断言是要走的路. 问题是: ...