Modernes C++ programmieren

Okt 20, 2024

lst-0051-godb.cpp

//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/qdY41d5a9
#include <iostream> 
#include <bitset> 
constexpr unsigned n_bits = sizeof(unsigned short)*8; // 8 bits per char 
auto reverse_bits(unsigned val) -> unsigned short { 
  unsigned short ret = 0; 
  for (unsigned i = 0; i < n_bits; ++i ) { 
    ret = (ret << 1) | (val & 1); // one to the side, set lowest bit
    val >>= 1;                    // one in the other direction 
  } 
  return ret; 
} 
void tell(unsigned short val) { 
  std::bitset<n_bits> bits{val}; 
  std::cout << val << "=" << bits << " -> "; 
  auto lav = reverse_bits(val); 
  std::bitset<n_bits> stib{lav}; 
  std::cout << lav << "=" << stib << "\n"; 
} 
int main() { 
  tell(36u);  // output: 36=0000000000100100 -> 9216=0010010000000000 
  tell(199u); // output: 199=0000000011000111 -> 58112=1110001100000000
  tell(255u); // Output: 255=0000000011111111 -> 65280=1111111100000000 
  tell(256u); // Output: 256=0000000100000000 -> 128=0000000010000000 
}