Javascript检查是否设置了位

时间:2018-05-24 14:27:59

标签: 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,根据预期的输出是假的。

1 个答案:

答案 0 :(得分:0)

这是因为当您执行按位操作时,javascript正在将数字转换为32位:https://www.w3schools.com/js/js_operators.asp

  

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

     

按位运算符在JS Bitwise章节中有详细描述。

让我们试试这个:

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

将有此输出:

255
255
18446744073709552000
0

如您所见,使用两个相同的数字执行&会返回该数字。因为这个数字不会发生,很明显原因在于转换。