fork download
  1. #include <climits>
  2. #include <cmath>
  3. #include <bitset>
  4. #include <iostream>
  5.  
  6. template <typename T>
  7. T build_mask(T num) {
  8. const int up_to_bit = log2(num);
  9. for (int i = 0; i < up_to_bit; i++)
  10. num |= 1 << i;
  11. return num;
  12. }
  13.  
  14. template <typename T>
  15. std::bitset<sizeof(T) * CHAR_BIT> get_bits(T num) {
  16. return std::bitset<sizeof(T) * CHAR_BIT>(num);
  17. }
  18.  
  19. int main() {
  20. int32_t msk = 9;
  21. int32_t nMsk = ~msk & build_mask(msk);
  22.  
  23. std::cout << "value: " << msk << std::endl;
  24. std::cout << "bits : " << get_bits(msk) << std::endl;
  25. std::cout << "mask : " << get_bits(build_mask(msk)) << std::endl;
  26.  
  27. std::cout << "value: " << nMsk << std::endl;
  28. std::cout << "bits : " << get_bits(nMsk) << std::endl;
  29.  
  30. return 0;
  31. }
  32.  
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
value: 9
bits : 00000000000000000000000000001001
mask : 00000000000000000000000000001111
value: 6
bits : 00000000000000000000000000000110