**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.
{
        const IColumn * in_column = arguments[0].column.get();
        ColumnPtr result_column;
        if (!((result_column = executeType<UInt8>(in_column))
            || (result_column = executeType<UInt16>(in_column))
            || (result_column = executeType<UInt32>(in_column))
            || (result_column = executeType<UInt32>(in_column))
            || (result_column = executeType<UInt64>(in_column))
            || (result_column = executeType<UInt128>(in_column))
            || (result_column = executeType<UInt256>(in_column))
            || (result_column = executeType<Int8>(in_column))
            || (result_column = executeType<Int16>(in_column))
            || (result_column = executeType<Int32>(in_column))
            || (result_column = executeType<Int64>(in_column))
            || (result_column = executeType<Int128>(in_column))
            || (result_column = executeType<Int256>(in_column))))
        {
            throw Exception(ErrorCodes::ILLEGAL_COLUMN,
               "Illegal column {} of first argument of function {}",
               arguments[0].column->getName(),
               getName());
        }
        return result_column;
    }
};
class FunctionToStringCutToZero : public IFunction