Побитовое двоичное переполнение менее 0-255, например 0-32?

#c# #performance #optimization #bit-manipulation

Вопрос:

Я использую двоичное переполнение / обертывание байта без знака 0-255, так как это экономит на определенных проверках границ (условных ветвях) в бесконечно обтекаемом игровом мире.

Есть ли способ, используя битовые операторы, обернуть произвольное значение степени 2, например 2^5 = 32?

Это произошло бы не условно, так что, если бы значение было >= 32, мы бы обернули, как обычно, и если бы это было >

Комментарии:

1. Модульный оператор недостаточно быстр?

2. @Tarik По модулю-одна из самых дорогостоящих арифметических операций, сравнимая с делением.

3. не знал. Спасибо за информацию.

4. @Engineer по модулю ровно 2 минус 1 будет быстрым на большинстве процессоров

Ответ №1:

Да, вы можете просто и значение с маской. Так что, если вам нужно ваше значение по модулю 32, вы можете сделать

 x = x amp; 31;
 

Это ограничит значение наименее значимыми 5 битами.
(Другими словами, это работает для всех оберток, которые имеют степень 2)

Комментарии:

1. Обычно вы видите, что оно записано в виде шестнадцатеричного значения , например 0x1F , чтобы было ясно, что это битовая маска, в которой все младшие биты установлены на 1

2. @canton7 или 0b1'1111