На месте побитовое И затем восстановить первоначальное значение - PullRequest
0 голосов
/ 07 февраля 2019

У меня жесткое ограничение памяти, когда мне не разрешается выделять кучу памяти и использовать локальные переменные в стеке для следующей битовой операции.

У меня есть два целочисленных значения A и B (давайтескажем, они просто двухбайтовые значения).Я хочу знать, что является результатом A & B (например, A &= B), а затем восстановить исходное значение A в A.

Поскольку дополнительная память не разрешена, я могувременно не сохранять исходное значение A.Могу ли я просто использовать последовательность битовых операций для восстановления значения A?

Причина этого в том, что у меня большой массив данных, где мне нужно считать биты после того, как я побитовый, и что-тоЭто.Но мне нужно сохранить первоначальное значение, чтобы сравнить их с другими значениями.Фактические данные находятся на устройстве, где выделение кучи очень дорого.И данные имеют динамическую длину, поэтому я не могу объявить локальную переменную для хранения ее временного значения.

Возможно ли это?Если да, то как мне это сделать?

1 Ответ

0 голосов
/ 07 февраля 2019

Похоже, у вас сложилось впечатление, что вам нужно сделать копию всего массива, изменить копию, а затем выполнить операции с ней.В этом нет необходимости.

Для каждого элемента массива вычислите A & B и сохраните его в локальном каталоге.Затем посчитайте количество установленных битов и добавьте его к промежуточному итогу.

Например:

int count_bits_with_and(unsigned char *array, int size, unsigned char val)
{
    int i, sum;

    for (i=0, sum=0; i<size; i++) {
        unsigned char v = array[i] & val;
        int count = count_bits(v);
        sum += count;
    }
    return sum;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...