ビット演算のアルゴリズム
あるビットマップがあって(ビット位置は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で発見した。慣用句なんですかね?ふむ。