fork download
#include <iostream>
#include <bitset>
#include <sstream>

using namespace std;

unsigned int reverse_bits(unsigned int value) {
  unsigned int result = 0;
  while(value) {
  	result <<= 1;
  	result |= (value & 1);
  	value >>= 1;
  }
  return result;
}

template<typename T>
static std::string as_bin(T value) {
  std::stringstream ss;	
  ss << std::bitset<sizeof(T) * 8>(value);
  return ss.str();
}

void test(unsigned int input, unsigned int expected_result) {
  unsigned int reversed = reverse_bits(input);
  if (reversed == expected_result) {
  	cout << "Test OK for " << as_bin(input) << " = " << as_bin(reversed) << endl;
  } else {
  	cout << "Test FAIL for " << as_bin(input) << " = " << as_bin(reversed) << endl;
  }
}

int main() {
	cout << "Enter value: ";
	unsigned int value;
	cin >> value;
	unsigned int reversed = reverse_bits(value);
	cout << "input as bin: " << as_bin(value) << endl;
	cout << "reversed as bin: " << as_bin(reversed) << endl;
	test(0b0, 0b0);
	test(0b1, 0b1);
	test(0b10, 0b01);
	test(0b110, 0b011);
	test(0b11111100, 0b111111);
	return 0;
}
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