我有一个号码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
,根据预期的输出是假的。
答案 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
如您所见,使用两个相同的数字执行&
会返回该数字。因为这个数字不会发生,很明显原因在于转换。