番号が長いです。今私が欲しいのは次のとおりです(疑似コードで与えられます)、
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;
}