未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

ビット演算のアルゴリズム

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