JS中的位运算符

摘要

在编程世界里,很多语言本身就提供有位运算:如PHP、Java等。当然了,JavaScript本身也提供了位运算。相信很多人都对JavaScript中的位运算比较陌生。

今天,笔者就来详谈一下JS中的6个位运算符(&、|、^、~、<<、>>)。

在编程世界里,很多语言本身就提供有位运算:如PHP、Java等。当然了,JavaScript本身也提供了位运算。相信很多人都对JavaScript中的位运算比较陌生。

今天,笔者就来详谈一下JS中的6个位运算符(&、|、^、~、<<、>>)。

位运算符是把操作数看作一系列单独的位,而不是一个数字值。数值或字符在内存中被存储为0和1的序列,每个0或1被称之为1个位。比如说10进制1在计算机内被存储为00000001。如果我们把00000001中的1往前移动一位00000010,就变成了10进制的2了。所以,在编程语言中,合理利用位运算可以极大方便我们处理一些问题。

位运算符的优点与缺点

1、位运算直接对二进制位进行计算,是非常底层的运算。因此,运算速度极快;

2、位运算只对整数起作用,如果一个运算数不是整数,会自动转为整数后再运行;

3、很多人不了解位运算符,因此,写法虽然简单但不直观。

1、&按位与

&表示两个二进制位,同位都为1时,则返回1,否则返回0

在以前,我想要判断一个数是奇数还是偶数,我们往往会这样写:

  1. if (num % 2) {
  2.     console.log('num是偶数');
  3. else {
  4.     console.log('num是奇数');
  5. }

现在我们可以这样写:

  1. if (num & 1) {
  2.     console.log('num是奇数');
  3. else {
  4.     console.log('num是偶数');
  5. }

2、|按位或

|表示两个二进制位,同位都为0时,则返回0,否则返回1

在以前,我们对浮点数进行求整,我们往往会这样写:

  1. var num = parseInt(3.14);

现在我们可以这样写:

  1. var num = 3.14 | 0;

注:原因在于浮点数不支持位运算,所以会先转换成整数再和0的二进制进行按位或;利用这一点,我们可以对正数进行向下取整,对负数进行向上取整

3、^按位异或

^表示两个二进制位,同位中有且仅有一个为1时,则返回1,否则返回0

在以前,我们要实现0变1、1变0,我们往往会这样写:

  1. num = Number(!num);

现在我们可以这样写:

  1. num ^= 1;

4、~按位取反

~表示将一个二进制位,位中的1变成0,0变成1

对于~按位取反,我们往往使用的的~~(会隐士类型转换)来进行求整操作。浮点数不支持位运算,所以会先转换成整数再进行运算;利用这一点,我可以对正数进行向下取整,对负数进行向上取整

5、<<按位左移

<<表示把一个二进制位向左移动一位,长度保持不变,超过的位将丢失,而空出的位则补0

利用这个特性,我们按位左移1位,可以进行乘法操作:

  1. console.log(4 << 1) // 8

6、>>按位右移

>>表示把一个二进制位向右移动一位,长度保持不变,超过的位将丢失,而空出的位则补0

利用这个特性,我们按位右移1位,可以进行除法操作:

  1. console.log(8 >> 1) // 4

注:任何小数,我们按位右移0位,可以进行取整操作

shaw

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: