在SF上看到这个问题,js中怎么理解按位取反?
问题:
~ 运算符查看表达式的二进制表示形式的值,并执行位非运算。
Javascript 按位取反运算符 (~) ,对一个表达式执行位非(求非)运算。如 ~1 = -2; ~2 = -3;
js取反我只知道个!,但是~为什么也叫取反,他返回的又不是boolean类型?
~1,~2 的二进制又不是 -2 ,-3 ,怎么会转换成这么奇怪的值?
网友解答:
按位取反还真和boolean
没多大关系,大体流程是这样的:
就来看看~1
的计算步骤:
1
(这里叫:原码)转二进制 = 00000001
11111110
1
(表示负数),将除符号位之外的其他数字取反 = 10000001
10000010
-2
有网友对上面的答案进行了三点补充,如下:
补码(x) = -x - 1
,正数:补码(x) = x
无符号数
,就没有这样的烦恼了,比如C语言有无符号整型,就能对无符号整型直接按位取反。0xFFFF ^ a
var a = 0x8321;console.log(a.toString(2));console.log((0xFFFF ^ a).toString(2));//1000001100100001//111110011011110 => 左边最高位是0,被隐藏了。
下面举个例子:
var n = -4.9;console.log(n); //4.9n = ~n;console.log(n);//3n = ~n;console.log(n);//4
例2:
var n = 4.2;console.log(n); //4.2n = ~n;console.log(n);//-5n = ~n;console.log(n);//4
例3:
var n = 4;console.log(n); //4n = ~n;console.log(n);//-5n = ~n;console.log(n);//4