美文网首页
js 中位运算的应用

js 中位运算的应用

作者: 月下吴刚_c8c7 | 来源:发表于2019-02-22 17:02 被阅读0次

按位运算符有6个:

  • 按位与 &
  • 按位或 |
  • 按位异或 ^
  • 取反 ~
  • 右移 >>
  • 左移 <<

应用

  • 用一个数和1进行按位&操作来判断奇偶数,而且速度比判断余数更快

    奇数的二进制码的最后一位数肯定是1,而1只有最后一位为1,按位&操作之后,结果肯定只有最后一位数为1。而偶数的二进制表示的最后一位数是0,和1进行按位&操作,结果所有位数都为0。
    只要任何一位是0 &运算的结果就是 0,所以可以用&把某个变量不必要的位设为0, 比如某个变量的二进制表示为 0 1 0 0 1 0 0 1, 我想保留低4位,消除高4位, 用 & 0x0F就可以了(注:0x为16进制表示法,0x0F 对应的二进制为 0 0 0 0 1 1 1 1)

function assert(n) {
   if (n & 1) {
      console.log("n是奇数");
  } else {
      console.log("n是偶数");
  }
}
assert(3); // "n是奇数"
  • 用位运算 | 来向下求整

其实浮点数是不支持位运算的,所以会先把1.1转成整数1再进行位运算,就好像是对浮点数向下求整。所以1|0的结果就是1。

var num = 1.1 | 0;    // 结果为1
  • 用异或运算 ^ 调换两个数字的值
var num1 = 1, num2 = 2;
num1 = [num2, num2 = num1][0];
console.log(num1); // 2
console.log(num2); // 1
var num1 = 1, num2 = 2;
num1 ^= num2; // num1 = num1 ^ num2 = 1 ^ 2 = 3
num2 ^= num1; // num2 = num2 ^ (num1 ^ num2) = num1 = 1
num1 ^= num2; // num1 = num1 ^ num2 ^ num1 = num2 = 2
console.log(num1); // 2
console.log(num2); // 1
  • 取反 ` 运算

对一个整数num按位求反, 等于它的 相反数减1,即 ~num = -num-1;
~~num == -(num-1)-1 === num; 对一个数两次求反结果为这个数本身
浮点数是不支持位运算的,所以会先直接去除小数部分,转成整数再进行位运算,就好像是对浮点数向下求整
~~可以进行类型转换,位运算会默认将非数字类型转换成数字类型再进行运算 (转换结果为整数 直接去除小数部分)

~~true == 1;
~~false == 0;
~~"" == 0;
~~"all" == 0;
~~"32all" == 0;
~~"all43" == 0;
~~[] == 0;
~~undefined ==0;
~~!undefined == 1;
~~null == 0;
~~!null == 1;
~~(5.9) == 5;
~~(5.2) == 5;
~~(-5.9) == -5;
  • 移位运算符 左移<< , 右移>>

向左移 几位就等于乘 2 的几次方, 同理右移几位等于 除以 2 的几次方
2向前移动1位变成4 利用这个特性可以做乘法运算
同理 >> 则可以做除法运算
任何小数 把它 >> 0可以取整
如3.14159 >> 0 = 3;
其默认将非数字类型的转换为数字类型再做运算的性质与 ~~ , | 0 一样

2 << 1 = 4    // 2 向左移1位, 即为 2*2  得4
3 << 1 = 6   // 3 向左移1位, 即为 3*2  得6
8 >>1 = 4   // 8向右移1位, 即为 8/2  得4

相关文章

  • js 中位运算的应用

    按位运算符有6个: 按位与 & 按位或 | 按位异或 ^ 取反 ~ 右移 >> 左移 << 应用...

  • js中的位运算

    在了解位运算之前, 必须先了解一下什么是原码, 反码和补码, 以及二进制与十进制的转换. 原码一个数在计算机中是以...

  • JS位运算应用场景

    准备知识 2进制和16进制 0x开头是16进制 0b开头是2进制 进制转换 数字转换成字符串 numObj.toS...

  • 理解js中的位运算

    & 按位与&& 运算符我们都知道,只有两个都为真,结果才为真。& 道理是一样的,只有两个数的值为1时,才返回1。&...

  • 位运算的简单应用-权限管理

    个人博客http://www.milovetingting.cn 位运算的简单应用-权限管理 位运算在实际的开发中...

  • 【转+补充】深入研究js中的位运算及用法

    转载自【博客园-不疯魔不成活】 《深入研究js中的位运算及用法》 什么是位运算? 位运算是在数字底层(即表示数字的...

  • js位运算

    极简主义 位运算符是在数字底层(即表示数字的 32 个数位)进行操作的。 http://www.w3school....

  • 位运算应用

    取模 由于偶数的最低位为 0,奇数为 1,所以取模运算可以用位操作来代替。 取整 位掩码 通过定义这些选项,可以用...

  • js运算符单竖杠“|”与“||”的用法和作用介绍

    在js开发应用中我们通常会碰到“|”与“||”了,那么在运算中“|”与“||”是什么意思呢? 在js整数操作的时候...

  • 位运算的应用

    位运算 程序中的所有数在计算机内存中都是以二进制的形式存储的。位运算说穿了,就是直接对整数在内存中的二进制位进行操...

网友评论

      本文标题:js 中位运算的应用

      本文链接:https://www.haomeiwen.com/subject/vfweyqtx.html