JavaScript中的取反位運算符:~
js中的數字默認是有符號的。有符號的32位二進制的最高位也就是第一位數字代表着正負,1代表負數,0代表整數爲什麼要用補碼?,計算機內部就是以補碼存儲。
(負數的補碼規則:符號位不變,其他位取反加1;正數的補碼規則:就是其本省)
~-1返回0:原碼:1...0000...0001
補碼:1...1111...1110 + 1 = 1...1111...1111
取反:0...0000...0000
補充:爲0開頭無需處理爲補碼
十進制:0
~1返回-2:
原碼:0...0000...0001
補碼:0...0000...0001
取反:1...1111...1110
補充:爲1開頭,需要處理爲補碼:1...0000...0010
十進制:-2
~2返回-3
原碼:0...0000...0010
補碼:0...0000...0010
取反:1...1111...1101
補充:爲1開頭,需要處理爲補碼:1...0000...0011
十進制:-2
~3返回-4
原碼:0...0000...0011
補碼:0...0000...0011
取反:1...1111...1100
補充:爲1開頭,需要處理爲補碼:1...0000...0100
十進制:-4
~0返回-1
原碼:0...0000...0000
補碼:0...0000...0000
取反:1...1111...1111
補充:爲1開頭,需要處理爲補碼:1...0000...0001
十進制:-1
~9返回-10
原碼:0...0000...0101
補碼:0...0000...0101
取反:1...1111...1010
補充:爲1開頭,需要處理爲補碼:1...0000...0110
十進制:-10
規律:
取反操作可以用以下公式來表達,如n的取反後的值爲:
~n = n*(-1)-1 = -(n+1)
取反操作在javascript框架中的用途:
var index = -1;
if(~index){};//此時,if內部的返回值爲0,表示if不成立,經常用以判斷變量值是否等於-1的場景