JavaScript位运算符

整数在计算机中的存储

在计算机中用32位表示一个数。
ECMAScript标准中,整数有两种类型,有符号整数(表示正数和负数)和无符号整数(只能是正数)。有符号整数的前31位表示数字,第32位表示符号,0为正数,1为负数;无符号整数的32位全部表示数字。
有符号数字范围:-2147483648 — 2147483648
无符号数字范围:0 — 4294967296

在ECMAScript中,所有整数字面量默认都是有符号整数。
在这里插入图片描述
18: 0000 0000 0000 0000 0000 0000 0001 0010

let num = 18;
console.log(num.toString(2));
//输出10010

二进制数转化成十进制
在这里插入图片描述
负数转化成二进制数
1、把该数的整数版本转化成二进制数
2、取该二进制数的反码(0变成1,1变成0)
3、反码加一
-18

0000 0000 0000 0000 0000 0000 0001 0010
1111 1111 1111 1111 1111 1111 1110 1101
1111 1111 1111 1111 1111 1111 1110 1110

let num = -18;
console.log(num.toString(2));
//输出 -10010

可以看出输出的不是完整的二进制数,而是其绝对值的二进制加上-号

位运算符

NOT(~)、AND(&)、OR(|)、XOR(^)、左移(<<)、有符号右移(>>)、无符号右移(>>>)

位运算符NOT(~)
处理过程:
1、转换成32位的二进制数
2、取二进制数的反码
3、把反码转换成浮点数
示例:

let num = 4;
console.log(~num);
//输出:  -5

可以发现其实是 -4-1 = -5

位运算符AND(&)
计算规则:
在这里插入图片描述
处理过程:
1、将两边的数转化成32位二进制数
2、右对齐按照计算规则计算
示例:

 25 = 0000 0000 0000 0000 0000 0000 0001 1001
  3 = 0000 0000 0000 0000 0000 0000 0000 0011
---------------------------------------------
AND = 0000 0000 0000 0000 0000 0000 0000 0001
console.log(25 & 3) ;
//输出1

位运算符OR(|)
计算规则:
在这里插入图片描述
处理过程:
1、将两边的数转化成32位二进制数
2、右对齐按照计算规则计算
示例:

25 = 0000 0000 0000 0000 0000 0000 0001 1001
 3 = 0000 0000 0000 0000 0000 0000 0000 0011
--------------------------------------------
OR = 0000 0000 0000 0000 0000 0000 0001 1011
console.log(25 | 3);
//输出27

位运算符XOR(^)
计算规则:
在这里插入图片描述
处理过程:
1、将两边的数转化成32位二进制数
2、右对齐按照计算规则计算
示例:

25 = 0000 0000 0000 0000 0000 0000 0001 1001
  3 = 0000 0000 0000 0000 0000 0000 0000 0011
---------------------------------------------
XOR = 0000 0000 0000 0000 0000 0000 0001 1010
console.log(25 ^ 3);
//输出26

左移运算(<<)
处理过程:
1、转化成二进制数
2、保留符号位不动,把表示数字的位左移指定位数
3、右侧末尾补充上指定位数个0
示例:

25 << 5
25 =  0000 0000 0000 0000 0000 0000 0001 1001
      0000 0000 0000 0000 0000 0011 0010 0000
console.log(25 << 5);
//输出800

有符号右移运算(>>)
处理过程:
1、转化成二进制数
2、保留符号位不动,把表示数字的位右移指定位数
3、左侧空位补充上指定位数个0
示例:

25 >> 5
25 =  0000 0000 0000 0000 0000 0000 0001 1001
      0000 0000 0000 0000 0000 0000 0000 0000
console.log(25 >> 5);
//输出0
console.log(25 >> 2);
      0000 0000 0000 0000 0000 0000 0000 0110
//输出6

无符号右移运算(>>>)
处理过程:
1、转化成二进制数
2、把32位数字整体右移指定位数
3、左侧空位补充上指定位数个0
对于正数来说和有符号右移一致,负数不一致
示例:

25 >>> 2
25 =  0000 0000 0000 0000 0000 0000 0001 1001
      0000 0000 0000 0000 0000 0000 0000 0110
console.log(25 >>> 2);
//输出6

-25 >>> 2
-25  =  1000 0000 0000 0000 0000 0000 0001 1001
        0010 0000 0000 0000 0000 0000 0000 0110
 console.log(-25 >>> 2);
 //输出 1073741817
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值