1. 程式人生 > >Javascript中的破浪號~,其實就是位操作符取反操作

Javascript中的破浪號~,其實就是位操作符取反操作

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的場景