時間能淡忘一切,只要時間夠久,即使是曾經最深刻的記憶。
按位取反,涉及到補碼等計算機知識,大學時學過,現在提起原碼、反碼、補碼,依稀有點影響,但具體的已淡忘的不留一絲痕跡。借助網絡的力量,再次來記憶一遍。
在 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'))) {// 存在}