js位运算符详细介绍

位运算符

位运算分为两种,位逻辑运算符与位移运算符。
js 中,位运算符包括7种:按位非(NOT)、按位与(AND)、按位或(OR)、按位异或(XOR)、左移、有符号右移、无符号右移。
JavaScript 将数字存储为 64 位浮点数,但所有按位运算都以 32 位二进制数执行。
在执行位运算之前,JavaScript 将数字转换为 32 位有符号整数。
执行按位操作后,结果将转换回 64 位 JavaScript 数。

1、& 按位与

&是二元运算符,它以特定的方式的方式组合操作数中对应的位,如果对应的位都为1,那么结果就是1, 如果任意一个位是0 则结果就是0。

1 & 3的结果为1
那我们来看看他是怎么运行的
1的二进制表示为0 0 0 0 0 0 0 1
3的二进制表示为0 0 0 0 0 0 1 1

console.log(1&3);

比较二进制上对应位置的数,发现1和3,只有最后一位都是1,所以二进制比较的结果是:0000 0001,转化为十进制为1。

小技巧:使用&运算符判断一个数的奇偶

可以用一个数和1进行按位&操作来判断其奇偶性,比如 num&1,若为1,则num是奇数;若为0,则num是偶数。

2、| 按位或

|运算符跟&的区别在于如果对应的位中任一个操作数为1 那么结果就是1。

4的二进制表示为0 0 0 0 0 1 0 0
3的二进制表示为0 0 0 0 0 0 1 1

console.log(4 | 3);

4 | 3的结果为7。
按照按位或的规则,4|3的二进制结果是0 0 0 0 1 1 1 ,转换为10进制,最后结果是7

小技巧:使用|来向下取整

可以用一个数和0进行(|)|按位或操作来向下取整,比如 3.14 | 0= 3。

console.log(3.14  | 0);

3、^ 按位异或

^运算符跟|类似,但是还是有点不同。两个数值的对应位只有一个为1时结果才是1,否则为0。

4的二进制表示为0 0 0 0 0 1 0 0
3的二进制表示为0 0 0 0 0 0 1 1

console.log( 4^0 3);
console.log(12^0)
console.log(1.3^0)

所以 4 ^ 3的结果为0 0 0 0 1 0 1,转化为十进制,所以最后结果是5。

“异或运算”有一个常见运用:

连续对两个数a和b进行三次异或运算(aˆ=b;bˆ=a; aˆ=b;),可以互换它们的值。
此外,整数与整数本身按位异或得到的是0(因为每两个对应的数字都相同,所以最后返回的都是0)。
整数与0按位异或得到的是其本身,小数与0按位异或可以取整。
整数^0=整数本身
小数^0=整数

4、~否运算

~运算符是对位求反,1变0,0变1,也就是求二进制的反码。(反转所有位)

consol.log(~1);

1的二进制表示为 0 0 0 0 0 0 1

所以 ~1 的结果是-2

5、<< 左移

通过从右推入零向左位移,并使最左边的位脱落。对于其移动规则只需记住丢弃最高位,0补最低位即按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

console.log(5<<2);

5的二进制表示为 0 0 0 0 0 1 0 1
将5的二进制向左推动2个位子,补上2个0,得到0 0 0 1 0 1 0 0,转化为十进制,最后得到的结果就是20。

6、>> 右移

通过从左推入最左位的拷贝来向右位移,并使最右边的位脱落。对于其移动规则只需记住符号位不变,左边补上符号位即按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。

console.log(3>>1);

3的二进制表示为 0 0 0 0 0 0 1 1
将5的二进制向左推动2个位子0 0 0 0 0 0 0 1 ,并补上1个0,得到,转化为十进制,最后得到的结果就是1。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值