位操作符的基本运算符及实际应用


在学习位运算符的同时,经常会思考这些操作符到底在实践当中有何用处?接下来跟大家分享我的理解。


提示:以下是本篇文章正文内容,下面案例可供参考

一、位操作符的基本运算符

位操作符用于数值的底层操作,也就是操作内存中表示数据的比特(位)。

1.按位非

按位非操作符用(~)表示,,用于返回数值的一补数。它运算的最终结果是对数值取反并减1。

let num1=25;             //二进制 0000 0000 0000 0000 0000 0000 0000 0011
let num2= ~num1;         //二进制 1111 1111 1111 1111 1111 1111 1111 1100
console.log(num2);      //-26

等同于以下代码,但位操作的速度快得多,由于位操作是在数值的底层上表示完成的。

let num1=25;
let num2=-num1-1;
console.log(num2);      //"-26"

2.按位与

按位与操作符用(&)表示,有两个操作数。只有两个操作数相应的比特位都是1时,结果才为1,否则为0。

let result=25 & 3;
console.log(result);     // 1

在二进制中:
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
因此结果为1。

3.按位异或

按位异或操作符( ^ )表示,有两个操作数。两位都是1或0,则返回0。

let result=25^3;
console.log(result);     // 26

在二进制中:
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
因此结果为26。

4.按位或

按位或操作符用(|)表示,有两个操作数。至少一位是1时返回1,两位都是0时返回0;

let result=25 | 3;
console.log(result);     // 27

在二进制中:
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
因此结果为27。

5.左移

左移操作符用(<<)表示,按照指定的位数将数值的所有位向左移动。

let before=2//等于二进制10
let after=before<<5;    //等于二进制1000000,即为十进制64

6.有符号右移

有符号右移用(>>)表示,将数值的32位都向右移,并保留符号(正或负)。

let before=64//等于二进制1000000
let after=before>>5;    //等于二进制10,即为十进制2

7.无符号右移

无符号右移用(>>>)表示,将数值的32位都向右移,无符号右移会给空位补0,不管是符号位是什么!对于正数无符号右移与有符号右移结果相同。

let before=-64//等于二进制1111 1111 1111 1111 1111 1111 1100 0000
let after=before>>>5;    //等于十进制134217726

二、实际运用

1.使用&运算符判断奇偶

是奇数还是偶数取决于二进制中第一操作位是0还是1,由于按位与只有当两位操作数对应的比特位都是1才返回1。所以可以根据判断数与1进行按位与运算判断奇偶。

//偶数&1=0
//奇数&1=1
console.log(2&1);   // 0
console.log(3&1);   // 1

2.使用~~,<<,>>>,>>.|运算符取整

需要注意的是无符号右移(>>>)运算符不能对负数取整

console.log(~~9.68);    //-(-9-1)-1,即9
console.log(9.68>>0);    //9
console.log(9.68>>>0);    //9
console.log(9.68<<0);    //9
console.log(9.68|0);     //9

3.使用^运算符实现值交换

var a=6;
var b=4;
b^=a;
a^=b;
console.log(a);  //4
console.log(b);  //6

4.使用^运算符判断两个数是否相等


此文章是作为我在学习过程中的学习心得,若有错误欢迎指出!

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值