javascript操作符(~、&、|、^、>>、<<)


1、操作符非(~)

  var num = 7;

  var num2 = ~num;

  alert(num2);    // -8

  var num3 = -1;

  var num4 = ~num3;

  alert(num4);    // 0

  可以看出:~ 就是將原來的數值加1后取負,  即: ~x = -(x + 1)。

 

  底層原理: 

    先了解一下基本知識

    1、計算機里的數字是以補碼的形式表示的。

    2、取反即:0變1,1變0。

    3、第一個數為符號位,0為正數,1為負數。

    4、正數的原碼、反碼、補碼都一樣。

    5、負數的反碼:符號位不變,其余取反。補碼:反碼加1。

    6、0的反碼補碼都為0。

  

 

 

    ~即對當前數取反所表示的值。計算機中數字以補碼形式表示,7的取反正好是-8的補碼,所以~7 == -8;

 

   用途:

    1)、取整數隨機數

      ~~(Math.random()*7);    // 在0~6內取整數隨機數,包括0和6

      ~(Math.random()*7);      // 在-7~-1內取整數隨機數,包括-7和-1

      -~(Math.random()*7);      // 在1~7內取整數隨機數,包括1和7

    2)、解決抽象滲漏

      抽象滲漏:在代碼中暴露底層實現的細節。

      對於indexOf判斷是否存在,像>-1、!=-1、>=0、<0之類細節就應該屏蔽掉

      那么用~就很好解決了

 

        var str = 'hello World';
      if(~str.indexOf('ell'))
        return true;
      else
        return false;
 
        

 

 

2、按位與&

    var num1 = 25 & 7;

    var num2 = 25 & -7;

    var num3 = -25 & 7;

    var num4 = -25 & -7;

    alert(num1);    // 1

    alert(num2);    // 25

    alert(num3);    // 7

    alert(num4);    // -31

    原理:1&1=1、1&0=0、0&1=0、0&0=0。

    根據規則對補碼處理:

    25 & 7

    

    25 & -7

    

    -25 & 7

    

    -25 & -7

    

    紅 & 紅 == 綠    綠 == 最后一行的數的補碼

 

3、按位或 | 

    原理:1|1=1、1|0=1、0|1=1、0|0=0。

 

    例子: 參考上面的。

 

 

4、按位異 ^

    原理:1^1=0、1^0=1、0^1=1、0^0=0。

 

    例子: 參考上面的。

 

5、左移 <<   、右移 >>  、無符號右移 >>>

    

    簡單記法:(a << b) === Math.ceil(a*(2**b));

         (a >> b) === Math.floor(a/(2**b));

    

 

 

 

 

    

 

 我的博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM