битовый вектор пересекается при обработке формата файла паркета

Я занимаюсь паркетным форматом. Например:

группа данных:

1 2 ноль 3 4 5 6 ноль 7 8 ноль ноль 9 10 11 12 13 14

Я получил битовый вектор для обозначения нулевого элемента:

1 1 0 1 1 1 1 0 1 1 0 0 1 1 1 1 1 1

и хранить только ненулевой элемент:

1 2 3 4 5 6 7 8 9 10 11 12 13 14

Я хочу оценить предикат: больше 5

Я сравнил ненулевой элемент с 5 и получил битовый вектор:

0 0 0 0 0 1 1 1 1 1 1 1 1 1

Я хочу получить немного вектора для всех элементов:

0 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 1 1

0, выделенный жирным шрифтом, равен нулю, должен быть ложным

void IntersectBitVec(vector<int64_t>& bit_vec, vector<int64_t>& sub_bit_vec) {
int data_idx = 0,
int bit_idx = 63;
for (int i = 0; i < bit_vec.size(); ++i) {
for (int j = 63; j >=0; --j) {
if (bit_vec[i] & 0x01 << j) {
if (!(sub_bit_vec[data_idx] & 0x01 << bit_idx)) {
bit_vec[i] &= ~(0x01 << j);
}
if (--bit_idx < 0) {
--data_idx;
bit_idx = 63;
}
}
}
}}

Мой код довольно уродлив, есть ли способ сделать это быстро? Большое спасибо!

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]