**Use case**

Viewing binary data such as bitmasks, hashes, internal representation of IEEE-754 numbers, etc.
Mostly for debugging.

**Describe the solution you'd like**

Similar to `hex`/`unhex`.

`bin` - returns a string with `0` and `1`. Bits are in "human" order, most significant first. Most significant zero bits are not printed (except the case with single zero).

**Describe alternatives you've considered**

Now I have to run interactive `python` from command line, but I will be more happy using ClickHouse.

**Caveats**

The name `bin` may suggest that the function will "split data into bins" but it is completely unrelated.
{
    std::string res(sizeof(TUInt) * 2, '\0');
    writeHexUIntLowercase(uint_, res.data());
    return res;
}
extern const char * const hex_char_to_digit_table;
inline UInt8 unhex(char c)
{
    return hex_char_to_digit_table[static_cast<UInt8>(c)];
}
inline UInt8 unhex2(const char * data)
{
    return
          static_cast<UInt8>(unhex(data[0])) * 0x10
        + static_cast<UInt8>(unhex(data[1]));
}
inline UInt16 unhex4(const char * data)
{
    return
          static_cast<UInt16>(unhex(data[0])) * 0x1000
        + static_cast<UInt16>(unhex(data[1])) * 0x100
        + static_cast<UInt16>(unhex(data[2])) * 0x10
        + static_cast<UInt16>(unhex(data[3]));
}