我有一个数字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
,根据预期的输出是 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/