В двоичном представлении вес взлома - это число 1. Я наткнулся на веб-сайт и нашел для него ответ O (1):
v = v - ((v>>1) & 0x55555555);
v = (v & 0x33333333) + ((v>>2) & 0x33333333);
int count = ((v + (v>>4) & 0xF0F0F0F) * 0x1010101) >> 24;
Однако я не совсем понимаю алгоритм и не могу найти его описание нигде. Может кто-нибудь, пожалуйста, объясните это немного, особенно последняя строка (что означает "черт" * 0x1010101, а затем → 24 означает)?