#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