[英]Javascript check if bit is set
我公司拥有一批0xFFFFFFFFFFFFFFFD
和它的位置0x2
, 0x80
。
我想检查数字的位位置是否处于活动状态。
我在位操作员方面没有太多经验,非常抱歉我可能犯的明显错误。
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.