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