**Use case**

Convert bitmask to position.
It would allow us to directly use FLAT dictionary or Enum datatype without jumping around slow `bitmasktoArray` and `arrayMap`

**Describe the solution you'd like**

```
SELECT
    arrayMap(x -> log2(x), bitmaskToArray(100)) AS bitmask,
    bitPositions(100)  AS bitpositions

┌─bitmask─┬─bitpositions─┐
│ [2,5,6] │ [2,5,6]      │
└─────────┴──────────────┘
```

return true;
        }
        else
        {
            return false;
        }
    }
    template <typename T>
    void executeFloatAndDecimal(const T & in_vec, ColumnPtr & col_res, const size_t type_size_in_bytes) const
    {
        const size_t hex_length = type_size_in_bytes * 2 + 1; 
        auto col_str = ColumnString::create();
        ColumnString::Chars & out_vec = col_str->getChars();
        ColumnString::Offsets & out_offsets = col_str->getOffsets();
        size_t size = in_vec.size();
        out_offsets.resize(size);
        out_vec.resize(size * hex_length);
        size_t pos = 0;
        char * out = reinterpret_cast<char *>(&out_vec[0]);
        for (size_t i = 0; i < size; ++i)
        {
            const UInt8 * in_pos = reinterpret_cast<const UInt8 *>(&in_vec[i]);
            executeOneString(in_pos, in_pos + type_size_in_bytes, out);
            pos += hex_length;
            out_offsets[i] = pos;
        }
        col_res = std::move(col_str);
    }
    template <typename T>
    bool tryExecuteFloat(const IColumn * col, ColumnPtr & col_res) const