1 获得某位

uint64_t get_bit (uint64_t value, uint64_t k) { // from right to left
return (value >> k) & 1;
}

set

注意这里,移位写法​​value |= (uint64_t)1 << k;​​,不然,1默认是int型,移到31的时候,超过符号位,会报错。

uint64_t set_bit (uint64_t value, uint64_t k, uint64_t bit) {
if (bit == 1) {
value |= (uint64_t)1 << k;
}
else if (bit == 0) {
value &= ~((uint64_t)1 << k);
}

return value;
}