2016-07-27 61 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

相關問題