#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0c2V0PgojaW5jbHVkZSA8c3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1bnNpZ25lZCBpbnQgcmV2ZXJzZV9iaXRzKHVuc2lnbmVkIGludCB2YWx1ZSkgewogIHVuc2lnbmVkIGludCByZXN1bHQgPSAwOwogIHdoaWxlKHZhbHVlKSB7CiAgCXJlc3VsdCA8PD0gMTsKICAJcmVzdWx0IHw9ICh2YWx1ZSAmIDEpOwogIAl2YWx1ZSA+Pj0gMTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RhdGljIHN0ZDo6c3RyaW5nIGFzX2JpbihUIHZhbHVlKSB7CiAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CQogIHNzIDw8IHN0ZDo6Yml0c2V0PHNpemVvZihUKSAqIDg+KHZhbHVlKTsKICByZXR1cm4gc3Muc3RyKCk7Cn0KCnZvaWQgdGVzdCh1bnNpZ25lZCBpbnQgaW5wdXQsIHVuc2lnbmVkIGludCBleHBlY3RlZF9yZXN1bHQpIHsKICB1bnNpZ25lZCBpbnQgcmV2ZXJzZWQgPSByZXZlcnNlX2JpdHMoaW5wdXQpOwogIGlmIChyZXZlcnNlZCA9PSBleHBlY3RlZF9yZXN1bHQpIHsKICAJY291dCA8PCAiVGVzdCBPSyBmb3IgIiA8PCBhc19iaW4oaW5wdXQpIDw8ICIgPSAiIDw8IGFzX2JpbihyZXZlcnNlZCkgPDwgZW5kbDsKICB9IGVsc2UgewogIAljb3V0IDw8ICJUZXN0IEZBSUwgZm9yICIgPDwgYXNfYmluKGlucHV0KSA8PCAiID0gIiA8PCBhc19iaW4ocmV2ZXJzZWQpIDw8IGVuZGw7CiAgfQp9CgppbnQgbWFpbigpIHsKCWNvdXQgPDwgIkVudGVyIHZhbHVlOiAiOwoJdW5zaWduZWQgaW50IHZhbHVlOwoJY2luID4+IHZhbHVlOwoJdW5zaWduZWQgaW50IHJldmVyc2VkID0gcmV2ZXJzZV9iaXRzKHZhbHVlKTsKCWNvdXQgPDwgImlucHV0IGFzIGJpbjogIiA8PCBhc19iaW4odmFsdWUpIDw8IGVuZGw7Cgljb3V0IDw8ICJyZXZlcnNlZCBhcyBiaW46ICIgPDwgYXNfYmluKHJldmVyc2VkKSA8PCBlbmRsOwoJdGVzdCgwYjAsIDBiMCk7Cgl0ZXN0KDBiMSwgMGIxKTsKCXRlc3QoMGIxMCwgMGIwMSk7Cgl0ZXN0KDBiMTEwLCAwYjAxMSk7Cgl0ZXN0KDBiMTExMTExMDAsIDBiMTExMTExKTsKCXJldHVybiAwOwp9