JavaScript 位操作符

位操作符用于在最基本的层次上,即按内存中表示的数值的位来操作数值,ECMAScript中所有数值都以IEEE-754 64位格式存储,但位操作符并不直接操作64位的值。而是先将64位的值转换成32位的整数,然后执行操作,最后再将结果转换回64位。对于开发人员来说,由于64位存储格式是透明的,因此整个过程就像是只存在32位的整数一样。

对于有符号的整数,32位中的前31位用于表示整数的值。第32位用于表示数值的符号:0表示整数,1表示负数。这个表示符号的位叫做符号位,符号位的值决定了其他位数值的格式。其中,正数以纯二进制格式存储,31位中的每一位都表示2的幂。

10010  =>  2(4)*1 + 2(3)*0 + 2(2)*0 + 2(1)*1 + 2(0)*0 = 18

负数同样以二进制码存储,但是用的格式是二进制补码。计算一个数值的二进制补码,需要经过以下3个步骤:

1.求这个数值绝对值的二进制码

2.求二进制反码

3.得到的二进制反码加1

按位非(NOT)

按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码。按位非是ECMASsript操作符中少数几个与二进制计算有关的操作符之一。

var num = 25;

var num2 = ~num;

alert(num2); // -26

按位与(AND)

按位与操作符由一个和号字符(&)表示,它有两个操作符数。从本质上讲,按位与操作就是将两个数值的每一位对齐,然后根据规则(两个数值的对应位都是1时才返回1,其他都返回0),对相同位置上的两个数执行AND操作。

var r = 25 & 3;

alert(r); // 1

按位或(OR)

按位或操作符由一条竖线符号(|)表示,和按位与一样也是两个操作符数。从本质上讲,其将两个数值的每一位对齐,然后根据规则(两个数值的对应位都是0时才返回0,其他都返回1),对相同位置上的两个数执行OR操作。

var r = 25 | 3;

alert(r); // 27

按位异或(XOR)

按位异或操作符有一个插入符号(^)表示,也有两个操作符。规则(对应位相等返回0,不等返回1)

左移

左移操作符是由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定位数。

右移

右移操作符是由两个大于号(>>)表示,这个操作符会将数值的所有位向右移动指定位数。

左移带符号

左移操作符是由三个小于号(<<<)表示,这个操作符会将数值的所有位向左移动指定位数。

右移带符号

右移操作符是由三个大于号(>>>)表示,这个操作符会将数值的所有位向右移动指定位数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 高级运算符 文档地址 作为 基本运算符 的补充,Swift 提供了几个高级运算符执行对数传值进行更加复杂的操作。这...
    hrscy阅读 860评论 0 2
  • 表达式 表达式是由数字、运算符、数字分组符号(如括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合...
    劼哥stone阅读 588评论 0 4
  • 今天吃货妹子推荐的是椰汁香芒糯米卷 特点是新鲜、健康,完全俘获了吃货妹子的味蕾 芒果的清甜、椰汁的浓郁、糯米的软糯...
    以宁的糖阅读 734评论 7 9
  • 《爱情审判》 审讯室一: “警官、那女人真是我杀死的!我有一百个理由杀掉她!” “哦?”戴眼镜的...
    Qy邵唯阅读 689评论 1 1
  • 每个人都是别人生活的配角,而各种各样的生活交织成一张名叫青春的网。我的青春是一场无知的奔忙,在奔忙和紧迫的时光里,...
    桃之夭夭其叶蓁蓁阅读 278评论 0 0