~ 按位取反


時間能淡忘一切,只要時間夠久,即使是曾經最深刻的記憶。

按位取反,涉及到補碼等計算機知識,大學時學過,現在提起原碼、反碼、補碼,依稀有點影響,但具體的已淡忘的不留一絲痕跡。借助網絡的力量,再次來記憶一遍。

在 js 中是通過 ~ 符號進行按位取反操作的。具體的規則如下:

  • 原碼:10進制變2進制,8位,並標明符號位。0正數,1負數,最左一位為最高位。
  • 反碼:按位取反
  • 補碼:除符號位不變,其他位取反
  • 補碼修復:最高位為正,末尾 -1 修復;最高位為負,末尾 +1 修復
  • 轉換:2進制變10進制

補充:為什么要有補碼及補碼修正?因為計算機中減法是通過加一個負數處理的,而負數又是通過補碼保存的。目的就是為了統一加法減法。原碼:

舉例:

~9 結果:-10
原碼:00001001
反碼:11110110
補碼:10001001
修正:10001010 1是負,加1修正
轉換:-0008020 -> 10

~-9 結果:8
原碼:10001001
反碼:01110110
補碼:00001001
修正:00001000 0是正,減1修正
轉換:+0008000 -> 8

在 js 中運用:位運算的效率高於符號運算

let str = 'wwr23';
if (str.indexOf('2') > -1)) {// 存在 }
// 優化替換,原理 ~-1 // 0    ~0 // -1   ~1//-2   ~2//-3  只要不為0都為true
if (~str.indexOf('2'))) {// 存在}


免責聲明!

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



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