美文网首页
js按位运算符~和~~的使用

js按位运算符~和~~的使用

作者: 追梦_life | 来源:发表于2020-07-28 11:16 被阅读0次

在leetcode刷题时,看到了~~的写法,于是网上查了资料,在这里记录一下。

~(按位非)

MDN给出的解释如下:

对每一个比特位执行非(NOT)操作。NOT a 结果为 a 的反转(即反码)。非操作的真值表:

a NOT a
0 1
1 0
9 (base 10) = 00000000000000000000000000001001 (base 2)
               --------------------------------
~9 (base 10) = 11111111111111111111111111110110 (base 2) = -10 (base 10)

对任一数值 x 进行按位非操作的结果为 -(x + 1)。例如,~5 结果为 -6。

console.log('~null: ', ~null);       // => -1
console.log('~undefined: ', ~undefined);  // => -1
console.log('~0: ', ~0);          // => -1
console.log('~{}: ', ~{});         // => -1
console.log('~[]: ', ~[]);         // => -1
console.log('~(1/0): ', ~(1/0));      // => -1
console.log('~false: ', ~false);      // => -1
console.log('~true: ', ~true);       // => -2
console.log('~1.2543: ', ~1.2543);     // => -2
console.log('~4.9: ', ~4.9);       // => -5
console.log('~(-2.999): ', ~(-2.999));   // => 1

与 indexOf 一起使用示例:

if(arr.indexOf(ele) > -1){...} //易读

// 现在可以这样判断,两者效率:
if(~arr.indexOf(ele)){...} //简洁

~~ (双非)

相当于对任一数值 x 进行-(-(x+1) + 1)操作。

console.log('~~null: ', ~~null);       // => 0
console.log('~~undefined: ', ~~undefined);  // => 0
console.log('~~0: ', ~~0);          // => 0
console.log('~~{}: ', ~~{});         // => 0
console.log('~~[]: ', ~~[]);         // => 0
console.log('~~(1/0): ', ~~(1/0));      // => 0
console.log('~~false: ', ~~false);      // => 0
console.log('~~true: ', ~~true);       // => 1
console.log('~~1.2543: ', ~~1.2543);     // => 1
console.log('~~4.9: ', ~~4.9);       // => 4
console.log('~~(-2.999): ', ~~(-2.999));   // => -2

对于浮点数,~~value可以代替parseInt(value),而且前者效率更高些。

parseInt(-2.99) //-2
~~(-2.99) //-2
测试
var time1 = +new Date();
var count = 5000000;
var ele = 1;
var arr = [1,2,4,5,2];
var h = 1.01;

console.time('parseInt');
for (var i = count; i > 0; i--) {
    parseInt(h);
}
console.timeEnd('parseInt'); //84.385ms

console.time('~~');
for (var i = count; i>0; i--) {
    ~~h;
}
console.timeEnd('~~'); //13.386ms


console.time('arr.indexOf(ele) > -1');
for (var j = count; j>0; j--) {
    arr.indexOf(ele) > -1;
}
console.timeEnd('arr.indexOf(ele) > -1'); //16.263ms

console.time('~arr.indexOf(ele)');
for (var i = count; i>0; i--) {
    ~arr.indexOf(ele);
}

参考链接:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators

https://segmentfault.com/a/1190000003731938

相关文章

  • js按位运算符~和~~的使用

    在leetcode刷题时,看到了~~的写法,于是网上查了资料,在这里记录一下。 ~(按位非) MDN给出的解释如下...

  • 在编程中使用集合与按位运算符

    目录 一、引言二、离散数学中的集合三、位串和按位运算符四、在编程中使用位串和按位运算符五、练习题六、拓展阅读 本文...

  • C语言-按位逻辑运算符和位移运算符

    按位逻辑运算符 按位与运算符(bitwise AND operator) a & b 按位计算a和b的逻辑与; 按...

  • 第二十五章 高级运算符

    swift运算符和c++相同点 swift的位运算符和c的意义一样。 ~按位取反 &按位与 |按位或 ^按位异或 ...

  • 基础运算符

    [使1. 按位与运算符(&](#1. 按位与运算符(&)[按位或运算符 | ](#2. 按位或运算符(|)) 1....

  • 高级运算符(Advanced Operators)

    目录 [toc] 位运算符 1. 按位取反运算符~ 2. 按位与运算符& 3. 按位或运算符| 4. 按位异或运算...

  • 高级运算符

    1:位运算 1.1:按位取反运算符(~) 例子 1.2:按位与运算符 例子 1.3:按位或运算符 例子 1.4:按...

  • 开发基础随笔之位运算符(Bitwise Operators)

    位运算符,属于算术运算符 按位逻辑运算符: 位移运算符: 位运算符的运算数只能是整数 位移运算符:按位左移 a<<...

  • 位运算符

    按位运算符有6个 & 按位与| 按位或^按位异或~取反>>右移<<左移 1 、& 运算符 &是二元运算符,它以特定...

  • C、数据结构知识点

    1. 位运算符有: &(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。 其中,按位取反运算符是单目运算...

网友评论

      本文标题:js按位运算符~和~~的使用

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