按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码。
按位非是ECMAScript操作符中少数几个与二进制计算有关的操作符之一。
var num1 = 25; // 二进制0000 0000 0000 0000 0000 0000 0001 1001
var num2 = ~num1; // 二进制1111 1111 1111 1111 1111 1111 1110 0110
alert(num2); // -26
正数的补码 = 正数 本身
负数的补码 = 本身取反 +1
num1 = 25 的补码:0000 0000 0000 0000 0000 0000 0001 1001
按位非 取反码得到:1111 1111 1111 1111 1111 1111 1110 0110
第一位是符号位,反码第一位为 1 ,反码为负数,num2为负数
负数补码取反+1
取反后为:0000 0000 0000 0000 0000 0000 0001 1001
取反+1得:0000 0000 0000 0000 0000 0000 0001 1010
num2的补码:0000 0000 0000 0000 0000 0000 0001 1010
num2为 -26
正数:补码(x) = x
负数:补码(x) = -x - 1,
原文:https://www.cnblogs.com/xiaoanbucai/p/14240108.html