Предположим, ваши интты по 4 байта каждая.32 бита.
Более понятный способ:
Массив констант справки:
h[0]=3;
for (int i=1; i<7; i++){
h[i]=h[i-1]*4;
}
Позже, для проверки, если c
является целым числом после побитового XOR:
int count=0;
for (int i=0; i<7; i++){
if(c&h[i]==0)count++;
}
Другое решение.Очевидно, быстрее, но немного менее понятно:
int h[4]={1,0,0,0}
int count=0;
for (int i=0; i<15; i++){
count+=h[c&3];
c=c>>2;
}
Дальнейшее сгущение:
count= h[c&3] + h[(c=>>2)&3] + h[(c=>>2)&3] + h[(c=>>2)&3]+ h[(c=>>2)&3]+ h[(c=>>2)&3]+ h[(c=>>2)&3]+ h[(c=>>2)&3]+ h[(c=>>2)&3] + h[(c=>>2)&3]+ h[(c=>>2)&3]+ h[(c=>>2)&3]+ h[(c=>>2)&3]+ h[(c=>>2)&3]+ h[(c>>2)&3];
Еще дальше:
int h[16]={2,1,1,1, 1,0,0,0, 1,0,0,0, 1,0,0,0};
count= h[c&15] + h[(c=>>4)&15] + h[(c=>>4)&15] + h[(c=>>4)&15] + h[(c=>>4)&15] + h[(c=>>4)&15] + h[(c=>>4)&15]+ h[(c>>4)&15];
Если вам действительно нужно использовать функциюстолько (10 ^ 10) раз, считайте h [256] (вы уже поймали, как) и используйте:
count= h[c&255] + h[(c=>>8)&255] + h[(c=>>8)&255] + h[(c>>8)&255] ;
Я думаю, что справочный массив h [256 * 256] также будет пригоден для использованияеще.Тогда
count= h[c&255] + h[(c>>16)&(256*256-1)];
Массив из 2 ^ 16 дюймов будет весь в процессорных деньгах (правда, третий уровень).Так что скорость будет действительно отличной.