#include <climits>
#include <cmath>
#include <bitset>
#include <iostream>
template <typename T>
T build_mask(T num) {
const int up_to_bit = log2(num);
for (int i = 0; i < up_to_bit; i++)
num |= 1 << i;
return num;
}
template <typename T>
std::bitset<sizeof(T) * CHAR_BIT> get_bits(T num) {
return std::bitset<sizeof(T) * CHAR_BIT>(num);
}
int main() {
int32_t msk = 9;
int32_t nMsk = ~msk & build_mask(msk);
std::cout << "value: " << msk << std::endl;
std::cout << "bits : " << get_bits(msk) << std::endl;
std::cout << "mask : " << get_bits(build_mask(msk)) << std::endl;
std::cout << "value: " << nMsk << std::endl;
std::cout << "bits : " << get_bits(nMsk) << std::endl;
return 0;
}
I2luY2x1ZGUgPGNsaW1pdHM+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGJpdHNldD4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ClQgYnVpbGRfbWFzayhUIG51bSkgewoJY29uc3QgaW50IHVwX3RvX2JpdCA9IGxvZzIobnVtKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgdXBfdG9fYml0OyBpKyspCgkJbnVtIHw9IDEgPDwgaTsKCXJldHVybiBudW07Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdGQ6OmJpdHNldDxzaXplb2YoVCkgKiBDSEFSX0JJVD4gZ2V0X2JpdHMoVCBudW0pIHsKCXJldHVybiBzdGQ6OmJpdHNldDxzaXplb2YoVCkgKiBDSEFSX0JJVD4obnVtKTsKfQoKaW50IG1haW4oKSB7CglpbnQzMl90IG1zayA9IDk7CglpbnQzMl90IG5Nc2sgPSB+bXNrICYgYnVpbGRfbWFzayhtc2spOwoJCglzdGQ6OmNvdXQgPDwgInZhbHVlOiAiIDw8IG1zayA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgImJpdHMgOiAiIDw8IGdldF9iaXRzKG1zaykgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8ICJtYXNrIDogIiA8PCBnZXRfYml0cyhidWlsZF9tYXNrKG1zaykpIDw8IHN0ZDo6ZW5kbDsKCQoJc3RkOjpjb3V0IDw8ICJ2YWx1ZTogIiA8PCBuTXNrIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAiYml0cyA6ICIgPDwgZ2V0X2JpdHMobk1zaykgPDwgc3RkOjplbmRsOwoKCXJldHVybiAwOwp9Cg==