ビット演算のアルゴリズム
あるビットマップがあって(ビット位置は0〜15を取る)、iビット目が1だったら0〜iの1の数を数えるアルゴリズム。
if (bitmap & ((unsigned short) 1 << i)) {
/* Keep in `bitmap' only the bits 0..i-1. */
bitmap &= ((unsigned short) 1 << i) - 1;
/* Add `summary->indx' and the number of bits set in `bitmap'. */
bitmap = (bitmap & 0x5555) + ((bitmap & 0xaaaa) >> 1);
bitmap = (bitmap & 0x3333) + ((bitmap & 0xcccc) >> 2);
bitmap = (bitmap & 0x0f0f) + ((bitmap & 0xf0f0) >> 4);
bitmap = (bitmap & 0x00ff) + (bitmap >> 8);
};libiconvで発見した。慣用句なんですかね?ふむ。