Java:检查是否在长字符串中设置了特定位

Java:检查是否在长字符串中设置了特定位,java,bit-manipulation,bitwise-operators,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位中设置了位。(保证在秒长中只设置一

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

假设长
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
long中

一个解决办法是

  • 我首先检查
    B
    long设置了哪个位置位,让我们假设这个位置是
    p
    。这涉及到在每个位上循环以检查该位是否已设置

  • 现在在
    A
    long中,我可以检查
    p
    位是否已设置

  • 我的问题是是否还有其他解决方案,因为我不想在每个位上循环,也不知道要事先检查哪个位的位置。

    编辑:
    我看了一下,在这个问题中,
    x
    是事先知道的,但我事先不知道位置。

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

    例如:

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

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

    例如:

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

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

    if (A & B != 0) {
    
    }
    

    由于
    B
    只有一个
    1
    位,
    a&B
    当且仅当
    a
    中的同一位为
    1
    时将为非零。如果您想知道B的(仅)1位是否也在a中设置,您只需按位设置,并且两个:

    if (A & B != 0) {
    
    }
    

    由于
    B
    只有一个
    1
    位,
    a和B
    当且仅当
    a
    中的相同位为
    1
    时,
    a和B将不为零=,带符号位。@chrylis很好,我想你需要
    =,带符号位。@chrylisgoodpoint@Danieboy它不是重复的,在那个问题中,
    x
    是已知的。@Danieboy它不是重复的,在那个问题中,
    x
    是已知的。