Javascript 检查位是否已设置

标签 javascript node.js

我有一个数字0xFFFFFFFFFFFFFFFD,它的位置0x20x80

我想检查该数字的位位置是否有效。

我对位运算符没有太多经验,对于我可能犯的明显错误感到抱歉。

if ( 0xFFFFFFFFFFFFFFFD & 0x2 ) {
    console.log("true");
} else { console.log("false"); }


if ( 0xFFFFFFFFFFFFFFFD & 0x80 ) {
    console.log("true");
} else { console.log("false"); }


if ( 0xFFFFFFFFFFFFFFFD & 0x40 ) {
    console.log("true");
} else { console.log("false"); }

或者

if ( (0xFFFFFFFFFFFFFFFD & 0x2) != 0 ) {
    console.log("true");
} else { console.log("false"); }


if ( (0xFFFFFFFFFFFFFFFD & 0x80) != 0 ) {
    console.log("true");
} else { console.log("false"); }


if ( (0xFFFFFFFFFFFFFFFD & 0x40) != 0 ) {
    console.log("true");
} else { console.log("false"); }

我尝试了这个,但我得到的都是 false,根据预期的输出是 false。

最佳答案

这是因为当您执行按位运算时,JavaScript 会将数字转换为 32 位,如下所述: https://www.w3schools.com/js/js_operators.asp

The examples above uses 4 bits unsigned examples. But JavaScript uses 32-bit signed numbers. Because of this, in JavaScript, ~ 5 will not return 10. It will return -6. ~00000000000000000000000000000101 will return 11111111111111111111111111111010

Bitwise operators are fully described in the JS Bitwise chapter.

让我们试试这个例子:

console.log(0xff);
console.log(0xff & 0xff);
console.log(0xFFFFFFFFFFFFFFFD)
console.log(0xFFFFFFFFFFFFFFFD & 0xFFFFFFFFFFFFFFFD)

将得到以下输出:

255
255
18446744073709552000
0

如您所见,使用两个相同的数字执行 & 会返回该数字。因为对于您的庞大数字来说,这种情况不会发生,所以很明显,原因正在转换。

关于Javascript 检查位是否已设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50511874/

相关文章:

javascript - 无法显示标记。 setMarkers() 函数返回 TypeError : t. map 不是函数

node.js - root 在项目目录中找不到 gulp 命令

node.js - 带有 .validate() 的 Mocha 测试模式不返回

javascript - 如何使用 header 和数据创建对服务器的 javascript POST 请求

javascript - Jquery:如何在准备好的文档上递归分配按钮?

javascript - 使用 JavaScript 单击按钮删除 div

javascript - 单击按钮时执行 Node 命令

node.js - 我可以通过复制文件在 Azure Node 应用程序服务器上部署 node.js 吗?

javascript - 将主机解析为完整的 url,如 Node 中的curl

javascript - 为什么不尝试使用catch block 捕获异常