Java:检查特定位是否设置为long

时间:2016-07-27 08:08:09

标签: java bit-manipulation bitwise-operators

我有一段时间,我想检查是否设置了特定位置的位。

假设长A

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0010 0100 0100

因此设置了3,7,10,13位的位。

现在我有另一个长B

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 0000 0000

并在此长10位设置。 (保证在第二个长度中只设置一个位)

现在通过比较以上两个长AB,我想确定10位置位是否设置在A长。

一个解决方案是

  1. 我首先检查B长位设置的位置,让我们说这个位置是p。这涉及循环每个位以检查该位是否已设置。

  2. 现在在A长,我可以检查是否设置了p

  3. 我的问题是还有其他解决办法,因为我不想循环每一位,而且我不知道事先检查哪一位的位置。

    编辑: 我看了Java: Checking if a bit is 0 or 1 in a long并且在这个问题中x事先已知,但我事先并不知道这个位置。

2 个答案:

答案 0 :(得分:1)

要检查某个位是否已设置,请使用带有代表该位的掩码的&运算符。

例如:

    long vectorValue = 985739487549L;
    long bitMask = 32L;

    boolean hasBit = false;
    int vectorMaskedValue = vectorValue & bitMask;
    if (vectorMaskedValue == bitMask)
    {
        hasbit = true;
    }

答案 1 :(得分:1)

如果你想知道B中是否也设置了(仅)1位B,你只需要按位和两位:

if (A & B != 0) {

}

由于B只有一个1位,A & B当且仅当1中的相同位为A时才会为非零。