#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';
}