ハミング重み / C

1の個数を数える。マスクをずらしていって、そこに1が立っていたらインクリメントする。

#include <iostream>
using namespace std;

uint8_t hamming_weight(uint16_t val){
    uint8_t sum = 0;
    for(int i=0; i<16; i++){
        if((1 << i) & val) sum++;
    }
    return sum;
}

int main(void){
    printf("%d\n", hamming_weight(0b11110011));
    return 0;
}

f:id:ti-nspire:20210407094131p:plain