我有一段时间,我想检查是否设置了特定位置的位。
假设长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位设置。 (保证在第二个长度中只设置一个位)
现在通过比较以上两个长A
和B
,我想确定10位置位是否设置在A
长。
一个解决方案是
我首先检查B
长位设置的位置,让我们说这个位置是p
。这涉及循环每个位以检查该位是否已设置。
现在在A
长,我可以检查是否设置了p
位
我的问题是还有其他解决办法,因为我不想循环每一位,而且我不知道事先检查哪一位的位置。
编辑:
我看了Java: Checking if a bit is 0 or 1 in a long并且在这个问题中x
事先已知,但我事先并不知道这个位置。
答案 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
时才会为非零。