仅比较数字的特定位

时间:2017-10-11 17:37:40

标签: javascript bit-manipulation

我正在尝试对两个数字进行比较,但是我只希望其中一个数字的第n位等于某个二进制值

ex:assert(5 == 0b1XX)== true 因为5是0b101而第3个MSB是1

无论如何我可以在javascript中使用不关心(X)吗?

2 个答案:

答案 0 :(得分:1)

按位 SHIFT >>以及按位 AND &来实现此目的。

// 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;
}

答案 1 :(得分:0)

@hermbit是对的。我也会尝试解释它。

您可以使用>>运算符来移动数字的位表示。

因此,如果您的号码为0b101并且您将其移动两个位置,则会获得0b001(删除最后两个位置并在左侧填充0。

然后,您可以使用&创建逻辑和两个数字。在这种情况下

0b001 & 0b001等于0b001,因为只有在两个数字为1的地方,它才会返回一个位为1的数字。

我希望这能澄清事情。