2016-07-27 23 views
0

longがあり、特定の位置のビットがセットされているかどうかをチェックしたいと思います。Java:特定のビットがlongに設定されているかどうかを確認してください

長いA

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

を仮定SO 3、7、10のビットは、13点の位置が設定されます。

今私は

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

とビットがセットされているこの長い10位の

B別の長いを持っています。 (2番目のロングで1ビットしかセットされないことが保証されています) ABここでは、10ビットが Aに設定されているかどうかを調べたいと思います。

一つの解決策は、

  1. である私が最初にこの位置はpであると言うことができますビットがセットされている位置に長いBに確認してください。これは、各ビットをループして、そのビットがセットされているかどうかをチェックすることを含む。 「pビットがセットされている場合

  2. は今長いAに私がチェックすることができるか、私はしたくないので、ない

私の質問は、他のソリューションは、各ビットをループに、そこにあると私はドンあらかじめ確認するビットの位置を知っている。

EDIT: 私は事前に知られ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

あなたはBの(唯一の)1ビットもAに設定されているかを知りたい場合は、単にビット単位のAND 2に必要があります。

if (A & B != 0) { 

} 

Bには1ビットが1つのみ含まれているので、に同じビットがである場合に限り、A & Bは0ではありません。

+0

あなたは '!='が必要だと思っています。 – chrylis

+0

@chrylis良い点 – Eran

関連する問題