О каких ПОЛЕЗНЫХ приемах кода побитового оператора разработчик должен знать? [закрытый]

Я - абсолютно уверенное Шифрование AES, не добавляет ничто к зашифрованным данным, так как это выдало бы информацию о переменных состояния, и это - Плохая Вещь когда дело доходит до криптографии.

, Если Вы хотите смешать сжатие и шифрование, сделайте их в том порядке. Причиной являются зашифрованные данные (идеально) похож на полностью случайные данные, и алгоритмы сжатия закончат тем, что делали данные больше, из-за его неспособности на самом деле сжать любой из него и наверху бухгалтерии, которая идет с любым форматом сжатого файла.

62
задан ming_codes 30 March 2011 в 06:39
поделиться

8 ответов

См. Знаменитые Bit Twiddling Hacks
Большинство методов умножения / деления не нужны - компилятор сделает это автоматически, и вы просто запутаете людей.

Но есть представляют собой набор хаков типа «проверить / установить / переключить бит N», которые очень полезны при работе с оборудованием или протоколами связи.

41
ответ дан 24 November 2019 в 16:30
поделиться

Вы можете сжать данные, например, набор целых чисел:

2
ответ дан 24 November 2019 в 16:30
поделиться

1) Разделить / умножить на степень 2

foo >> = x; (разделить на степень 2)

foo << = x; (умножьте на степень 2)

2) Swap

x ^= y;
y = x ^ y;
x ^= y;
1
ответ дан 24 November 2019 в 16:30
поделиться

Я использовал поразрядные операторы, чтобы эффективно выполнять вычисления расстояния для битовых строк . В моем приложении битовые строки использовались для представления позиций в дискретном пространстве ( октодерево , если вам интересно, закодировано с помощью порядка Мортона ). Расчеты расстояния были необходимы, чтобы узнать, попадают ли точки на сетке в определенный радиус.

1
ответ дан 24 November 2019 в 16:30
поделиться

Подсчет установленных битов, поиск самого низкого / самого высокого установленного бита, поиск n-го сверху / снизу установленного бита и другие могут быть полезными, и стоит посмотреть на хаки для перестановки битов Сайт .

Тем не менее, такие вещи повседневно не важны. Полезно иметь библиотеку, но даже в этом случае наиболее распространенное использование является косвенным (например, с использованием контейнера битового набора). Кроме того, в идеале это будут стандартные библиотечные функции - многие из них лучше обрабатывать с помощью специализированных инструкций ЦП на некоторых платформах.

1
ответ дан 24 November 2019 в 16:30
поделиться

Хотя умножение / деление сдвигом кажется отличным, единственное, что мне время от времени требовалось, - это сжатие логических значений в биты. Для этого вам понадобится побитовое И / ИЛИ и, возможно, битовый сдвиг / инверсия.

0
ответ дан 24 November 2019 в 16:30
поделиться

Я когда-либо использовал только три с любой частотой:

  1. Установите бит: a | = 1 << bit;

  2. Немного очистить: a & = ~ (1 << bit);

  3. Проверить, установлен ли бит: a & (1 << бит);

12
ответ дан 24 November 2019 в 16:30
поделиться

Мне нужна была функция для округления чисел до ближайшей степени двойки, поэтому я посетил веб-сайт Bit Twiddling, который появлялся несколько раз, и придумал следующее:

i--;
i |= i >> 1;
i |= i >> 2;
i |= i >> 4;
i |= i >> 8;
i |= i >> 16;
i++;

Я использую его на типе size_t . Вероятно, это не будет хорошо работать на подписанных типах. Если вас беспокоит переносимость на платформы с разными типами размеров, добавьте в код директивы #if SIZE_MAX> = (number) в соответствующих местах.

0
ответ дан 24 November 2019 в 16:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: