js中的按位取反運算符~


一、運算符~

  JS按位取反運算符~,是對一個表達式執行位非(求非)運算。如~1 = -2,~-3=2,~true=-2,~false=-1

二、如何按位取反計算

  按位取反的運算規則步驟:

  1、十進制轉成原碼

  轉成二進制原碼,最高位是符號位,0為正數,1為負數

 十進制 ----> 原碼
      1 ----> 00000001
     -1  ----> 10000001

  2、原碼轉成反碼

  正數的反碼就是原碼,負數的反碼是符號位不變,其余位取反

 十進制 ----> 原碼 ----> 反碼
      1 ----> 00000001 ----> 00000001
     -1 ----> 10000001 ----> 11111110

  3、反碼轉成補碼

  正數的補碼還是原碼,負數的補碼是在反碼的基礎上加1

 十進制 ----> 原碼 ----> 反碼 ----> 補碼
      1 ----> 00000001 ----> 00000001 ----> 00000001
     -1 ----> 10000001 ----> 11111110 ----> 11111111

  4、補碼取反得原碼

  正整數補碼取反之后符號位置為1,是一個負整數,所以再按照負整數計算補碼的方式逆運算得到原碼

  逆運算得到原碼,首先將取反的補碼轉成反碼,公式:反碼=補碼 - 1,然后將反碼轉成原碼,符號位不變,其他位取反

 十進制 ----> 原碼 ----> 反碼 ----> 補碼 ----> 補碼取反 ----> 取反補碼轉成反碼  ----> 轉成原碼
    1   ----> 00000001 ----> 0000001 ----> 00000001 ----> 11111110 ---->   11111101   ----> 10000010

  負整數補碼取反之后符號位置為0,是一個正整數,因正整數的反碼與補碼就是本身,所以不需要再進行逆運算

 十進制 ---->  原碼 ----> 反碼 ----> 補碼 ----> 補碼取反得原碼  
    -1  ----> 10000001 ----> 11111110 ----> 11111111 ---->   00000000  

  5、將原碼轉成二進制

 十進制 ----> 原碼 ----> 反碼 ----> 補碼  ----> 補碼取反  ----> 取反補碼轉成反碼  ----> 轉成原碼  ----> 轉成二進制
    1   ----> 00000001 ----> 0000001 ----> 00000001 ----> 11111110 ---->   11111101   ----> 10000010 ----> -2
 十進制 ----> 原碼 ----> 反碼 ----> 補碼  ---->  補碼取反得原碼  ----> 轉成二進制
    -1  ----> 10000001 ----> 11111110  ----> 11111111  ----> 00000000 ----> 0

  所以,~1=-2,~-1=0

三、使用 ~ 和!的區別

  findIndex是查詢是否在數組中,存在則返回索引,不存在返回-1,通過~取反,得到的效果與使用!相同,但是兩者返回的值不同。

  ~ 返回的是一個整數類型

  !返回的是一個boolean類型

 let arr = [1,2,3,4,5];
 console.log(~arr.findIndex(d=>d===1)?'1存在':'1不存在');  //1存在
 console.log(~arr.findIndex(d=>d===6)?'6存在':'6不存在');   //6不存在
console.log(~arr.findIndex(d=>d===6))      //0
console.log(!arr.findIndex(d=>d===6))      //false

四、取反再取反~~的作用

  操作符~, 是按位取反的意思,表面上~~(取反再取反)沒有意義,實際上在JS中可以將浮點數變成整數

 console.log(~~1.11);         //1
 console.log(~~-25.11);       //-25

 

  


免責聲明!

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



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