【发布时间】:2017-10-15 04:46:47
【问题描述】:
假设我们有1,这个以 2 为底的数字是:
00000000000000000000000000000001
现在我想翻转所有位以获得以下结果:
11111111111111111111111111111110
据我所知,解决方案是使用~(按位非运算符)翻转所有位,但~1的结果是-2:
console.log(~1); //-2
console.log((~1).toString(2)); //-10 (binary representation)
为什么我会得到这个奇怪的结果?
【问题讨论】:
-
11111111111111111111111111111110是-2 -
11111111111111111111111111111111是-1>~0 === -1 -
@AfshinMehrabani 没错,因为
parseInt第一个参数必须是字符串。parseInt('11111111111111111111111111111110', 2) | 0 -
Bitwise operators: "所有按位运算符的操作数都转换为二进制补码格式的有符号 32 位整数。二进制补码格式意味着数字的负数对应物(例如 5 与 -5)是所有数字的位反转(按位非数字,也就是数字的反码)加一。”
-
在纸上用手加两个,你会看到它变为零。加二等于零的数字应该称为减二。
标签: javascript numbers bitwise-operators