在 Github 上看到一句话:
~-
is the bitwise way to perform a- 1
operation.
所以 ~-10
就是 10 - 1 = 9。
为什么呢?
首先 -10
是一体的,~-10
表示对 -10
执行 ~
运算。
10
的二进制数字是 1010
,因为它是正数,所以在前面加 0,变成 01010
。
-10
是在 10
的基础上把所有数字 revert 一次,10101
,再加一,10110
。
最后 ~-10
就是 01001
,parseInt('01001',2)
得到 9。
在 js 中,bitwise 运算是把数字转换为 two's complement 的形式后再执行的运算,把 -10 转换为 two's complement 的形式的步骤:
(10).toString(2) = 1010
;01010
,因为在 two's complement 中,使用最左边的那位数字表示正数或负数,1 是负数,0 是正数;10101
;10101
的基础上加 1,10110
,这就是 10 的 two's complement 形式;注意 bitwise operator 只适用于整数,不适用于小数。在 c++ 中对小数执行 bitwise operator 会报错,在 js 中虽然不会报错,但会忽略小数部分。
const result = ~-10.5;
console.log(result) //9
相关文章: