我有一个很长的数字。现在,我要的是以下项目(以伪代码给出),爪哇查找设置比特长
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中有效地做到这一点?
我有一个很长的数字。现在,我要的是以下项目(以伪代码给出),爪哇查找设置比特长
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中有效地做到这一点?
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;
}
非常感谢。它工作很好。 – Arpssss 2012-04-28 20:07:38
如果您移位四位并检查交换机中两个最低位对,效率可能会更高 - 甚至可以使用8位。但我怀疑你是否需要它那么高效。 – 2012-04-28 20:11:51
应该答案是000011100000什么? – Thorn 2012-04-28 20:26:35
@Thorn,count = 1。 – Arpssss 2012-04-28 20:53:13
您测试了接受答案的代码,并且它为您提供了1个 0000001110000? – Thorn 2012-04-28 23:18:33