2016-07-27 62 views
0

我有一个很长的时间,我想检查是否在特定位置设置了某位。Java:检查一个特定的位是否设置为长

假设长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位设置或不

我的问题是有没有其他的解决办法,因为我不想遍历每一位和我不不知道事先检查哪个位的位置。

编辑: 我在Java: Checking if a bit is 0 or 1 in a long在这个问题x预先知道一看,但我不知道该位置提前。

+0

@Danieboy它不是重复的,在这个问题中'x'是已知的。 – Ritesh

回答

1

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

例如:

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

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

如果你想知道,如果(只)1位B在A也设置您只需位与两个:

if (A & B != 0) { 

} 

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

+0

我想你需要'!=',符号位是什么。 – chrylis

+0

@chrylis好点 – Eran

相关问题