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