fork download
  1. #include <iostream>
  2. #include <bitset>
  3. #include <sstream>
  4.  
  5. using namespace std;
  6.  
  7. unsigned int reverse_bits(unsigned int value) {
  8. unsigned int result = 0;
  9. while(value) {
  10. result <<= 1;
  11. result |= (value & 1);
  12. value >>= 1;
  13. }
  14. return result;
  15. }
  16.  
  17. template<typename T>
  18. static std::string as_bin(T value) {
  19. std::stringstream ss;
  20. ss << std::bitset<sizeof(T) * 8>(value);
  21. return ss.str();
  22. }
  23.  
  24. void test(unsigned int input, unsigned int expected_result) {
  25. unsigned int reversed = reverse_bits(input);
  26. if (reversed == expected_result) {
  27. cout << "Test OK for " << as_bin(input) << " = " << as_bin(reversed) << endl;
  28. } else {
  29. cout << "Test FAIL for " << as_bin(input) << " = " << as_bin(reversed) << endl;
  30. }
  31. }
  32.  
  33. int main() {
  34. cout << "Enter value: ";
  35. unsigned int value;
  36. cin >> value;
  37. unsigned int reversed = reverse_bits(value);
  38. cout << "input as bin: " << as_bin(value) << endl;
  39. cout << "reversed as bin: " << as_bin(reversed) << endl;
  40. test(0b0, 0b0);
  41. test(0b1, 0b1);
  42. test(0b10, 0b01);
  43. test(0b110, 0b011);
  44. test(0b11111100, 0b111111);
  45. return 0;
  46. }
Success #stdin #stdout 0s 4460KB
stdin
123
stdout
Enter value: input as bin: 00000000000000000000000001111011
reversed as bin: 00000000000000000000000001101111
Test OK for 00000000000000000000000000000000 = 00000000000000000000000000000000
Test OK for 00000000000000000000000000000001 = 00000000000000000000000000000001
Test OK for 00000000000000000000000000000010 = 00000000000000000000000000000001
Test OK for 00000000000000000000000000000110 = 00000000000000000000000000000011
Test OK for 00000000000000000000000011111100 = 00000000000000000000000000111111