**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.
{
            return false;
        }
    }
    static bool tryExecuteFixedString(const IColumn * col, ColumnPtr & col_res)
    {
        const ColumnFixedString * col_fstr_in = checkAndGetColumn<ColumnFixedString>(col);
        if (col_fstr_in)
        {
            auto col_str = ColumnString::create();
            ColumnString::Chars & out_vec = col_str->getChars();
            ColumnString::Offsets & out_offsets = col_str->getOffsets();
            const ColumnString::Chars & in_vec = col_fstr_in->getChars();
            size_t size = col_fstr_in->size();
            out_offsets.resize(size);
            out_vec.resize(in_vec.size() * 2 + size);
            char * begin = reinterpret_cast<char *>(out_vec.data());
            char * pos = begin;
            size_t n = col_fstr_in->getN();
            size_t prev_offset = 0;
            for (size_t i = 0; i < size; ++i)
            {
                size_t new_offset = prev_offset + n;
                executeOneString(&in_vec[prev_offset], &in_vec[new_offset], pos);
                out_offsets[i] = pos - begin;
                prev_offset = new_offset;
            }
            if (!out_offsets.empty() && out_offsets.back() != out_vec.size())
                throw Exception("Column size mismatch (internal logical error)", ErrorCodes::LOGICAL_ERROR);
            col_res = std::move(col_str);