2012-04-28 16 views
1

私は長い番号を持っています。今、私は(擬似コードで指定)は、次のされたい、Java Finding Longのビットセット

for each two bits of that long 

if the two bits == 11 

then count++ 

(for example if number is "11 01 10 00 11" it will give count = 2) 

は誰がどのようにJavaでこれを効率的に行うために私を助けることができますか?

+0

答えが000011100000のために何をすべきですか? – Thorn

+0

@Thorn、count = 1。 – Arpssss

+0

受け入れられた回答のコードをテストしたところ、 0000001110000の1が返されましたか? – Thorn

答えて

2
public static int count11(long n) { 
    int cnt = 0; 
    while (n != 0) { 
    if ((n & 3) == 3) cnt++; 
    n >>>= 2; 
    } 
    return cnt; 
} 

も、より効率的な変種:

public static int count11(long n) { 
    int cnt = 0; 
    while (n != 0) { 
    switch ((int)(n & 0x3F)) { 
    case 0x3F: cnt += 3; break; 
    case 0x3C: case 0x33: case 0xF: cnt += 2; break; 
    case 0x30: case 0xC: case 3: cnt++; 
    } 
    n >>>= 6; 
    } 
    return cnt; 
} 
+0

ありがとうございました。それはうまくいく。 – Arpssss

+0

4ビットシフトして、スイッチの最下位ビットペアを2つチェックするか、8ビットでも効率を上げると、効率はさらに向上します。しかし、私はあなたがそれが効率的であることを必要とするのか疑問です。 –

関連する問題