2012-04-28 63 views
1

我有一个很长的数字。现在,我要的是以下项目(以伪代码给出),爪哇查找设置比特长

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 2012-04-28 20:26:35

+0

@Thorn,count = 1。 – Arpssss 2012-04-28 20:53:13

+0

您测试了接受答案的代码,并且它为您提供了1个 0000001110000? – Thorn 2012-04-28 23:18:33

回答

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 2012-04-28 20:07:38

+0

如果您移位四位并检查交换机中两个最低位对,效率可能会更高 - 甚至可以使用8位。但我怀疑你是否需要它那么高效。 – 2012-04-28 20:11:51