2017-10-11 57 views
0

我试图做两个数字之间的比较只有特定的位,但我只想要其中一个号码的第n个位等于一定的二进制值比较一些

例如:断言(5 == 0b1XX)== true 因为5是0b101而第三个MSB是1

是否有反正我可以在JavaScript中使用一个无关(X)?

+0

搜索位运算符 – litelite

+2

是的,您正在寻找'(5&0b100)!== 0' – georg

+0

不幸的是,这不起作用,因为我正在使用别人写的函数,它不允许我操纵要比较的变量。正如我所说,唯一可行的是'不关心'。 –

回答

1

使用位SHIFT>>按位沿和&实现这一目标。

// SHIFT off the first two bits, then check the first bit with AND 
(0b101 >> 2 & 1) === 1 

>>将向右移位并丢弃任何移位的位。

&将返回1,当相应的位都是1

Here is the MDN page on bitwise operators

这里是你可以在任何位置使用任何值的函数:

// returns true if 'target' has a 'value' at 'position' 
function checkBit(target, position, value) { 
    return (target >> (position - 1) & 1) === value; 
} 
0

@hermbit是正确的。我也会试着解释一下。

您可以通过使用>>运算符来移位数字的位表示形式。

所以,如果你有数字5 0b101你接班两个地方你0b001(最后去掉两个地方,充满左肋0。

然后你可以使用&,使逻辑和两个号。在这种情况下

0b001 & 0b001等于0b001,因为它会返回一个数字,其中位将是1仅在两个数字都是1的地方。

我希望这能澄清事情。