javascript - JavaScript 按位运算如何处理 NOT (~) 运算符?

标签 javascript bitwise-operators

在 JavaScript 中执行以下代码行总是会产生意想不到的结果,我对此一无所知。 这就是我执行 NOT(反转)操作的方式:

2 = 0010

(~ 2) = 1101,即十进制的 13。但是在 JavaScript 中执行完全相同的操作会输出值 -3。谁能解释一下为什么会这样?

<body>
    <p id="demo"></p>
    <script>
    document.getElementById("demo").innerHTML = ~ 2;
    </script>
    </body>

结果: -3

最佳答案

JavaScript 使用 two's complement整数值的表示。它还对带符号的 32 位整数执行所有按位运算(根据需要转换参数)。所以表达式 ~2 不会导致 1101;相反,它是

1111 1111 1111 1111 1111 1111 1111 1101

恰好是 -3 的补码表示。 (最左边的位为1表示负数。)

咨询the docs on bitwise operators了解更多信息。

附言如果你真的想要 13 的结果,你可以屏蔽除低四位以外的所有位:((~2) & 0xF)

关于javascript - JavaScript 按位运算如何处理 NOT (~) 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44097751/

相关文章:

c# - 长期存储多个字符并恢复它们

javascript - 跟踪 knockout js 中输入值的变化

javascript - 表扩展的过渡

javascript - React JS 在文本字段中显示特定选定 ID 的所有数据

php - 如何测试 PHP 按位函数输入参数

c - 如果 -8 & 7 不为 0,为什么输出为 False?

c - 如何解决我的位移 C 代码中的以下错误?

javascript - 拖动图像以调整位置,就像在 Facebook 缩略图个人资料图片中一样

javascript - 页面上有多个 Accordion ?

php - 根据PHP中的报告级别触发错误的函数