繁体   English   中英

Javascript检查是否设置了位

[英]Javascript check if bit is set

我公司拥有一批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的,根据预期的输出是假的。

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

上面的示例使用4位无符号示例。 但是JavaScript使用32位带符号的数字。 因此,在JavaScript中,〜5不会返回10。它将返回-6。 〜00000000000000000000000000000101将返回11111111111111111111111111111010

在JS Bitwise一章中对Bitwise运算符进行了全面描述。

让我们尝试以下示例:

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

将具有以下输出:

255
255
18446744073709552000
0

如您所见,用两个相同的数字做&将返回该数字。 因为这对于您的庞大数量而言不会发生,所以很显然原因是在转化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM