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;
}