~ 按位取反

時間能淡忘一切,只要時間夠久,即便是曾經最深入的記憶。網絡

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

在 js 中是經過 ~ 符號進行按位取反操做的。具體的規則以下:code

  • 原碼: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 中運用:位運算的效率高於符號運算co

let str = 'wwr23';
if (str.indexOf('2') > -1)) {// 存在 }
// 優化替換,原理 ~-1 // 0    ~0 // -1   ~1//-2   ~2//-3  只要不爲0都爲true
if (~str.indexOf('2'))) {// 存在}
相關文章
相關標籤/搜索