#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==