#include <iostream>
#include <limits>
unsigned int ReverseBits(unsigned int input)
{
unsigned int output = input;
for (int i = sizeof(input) * 8 - 1; i; --i)
{
output <<= 1;
input >>= 1;
output |= input & 1;
}
return output;
}
struct Bits
{
unsigned bits;
Bits(unsigned value) : bits(value) {}
};
std::ostream& operator<<(std::ostream& os, const Bits& b)
{
unsigned mask = 1 << (std::numeric_limits<unsigned>::digits - 1);
while (mask)
{
os << ((b.bits & mask) != 0);
mask >>= 1;
}
return os;
}
int main()
{
unsigned num = 0xFFF0F0FF;
std::cout << Bits(num) << '\n';
std::cout << Bits(ReverseBits(num)) << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGltaXRzPgoKdW5zaWduZWQgaW50IFJldmVyc2VCaXRzKHVuc2lnbmVkIGludCBpbnB1dCkKewogICAgdW5zaWduZWQgaW50IG91dHB1dCA9IGlucHV0OwogICAgZm9yIChpbnQgaSA9IHNpemVvZihpbnB1dCkgKiA4IC0gMTsgaTsgLS1pKQogICAgewogICAgICAgIG91dHB1dCA8PD0gMTsKICAgICAgICBpbnB1dCA+Pj0gMTsKICAgICAgICBvdXRwdXQgfD0gaW5wdXQgJiAxOwogICAgfQogICAgcmV0dXJuIG91dHB1dDsKfQoKc3RydWN0IEJpdHMKewogICAgdW5zaWduZWQgYml0czsKICAgIEJpdHModW5zaWduZWQgdmFsdWUpIDogYml0cyh2YWx1ZSkge30KfTsKCnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBCaXRzJiBiKQp7CiAgICB1bnNpZ25lZCBtYXNrID0gMSA8PCAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46OmRpZ2l0cyAtIDEpOwoKICAgIHdoaWxlIChtYXNrKQogICAgewogICAgICAgIG9zIDw8ICgoYi5iaXRzICYgbWFzaykgIT0gMCk7CiAgICAgICAgbWFzayA+Pj0gMTsKICAgIH0KCiAgICByZXR1cm4gb3M7Cn0KCmludCBtYWluKCkKewogICAgdW5zaWduZWQgbnVtID0gMHhGRkYwRjBGRjsKCiAgICBzdGQ6OmNvdXQgPDwgQml0cyhudW0pIDw8ICdcbic7CiAgICBzdGQ6OmNvdXQgPDwgQml0cyhSZXZlcnNlQml0cyhudW0pKSA8PCAnXG4nOwp9