#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
, чтобы было ясно, что это битовая маска, в которой все младшие биты установлены на 12. @canton7 или
0b1'1111