2013-07-15 1 views
0

Моя система отслеживает разрешения как два битовых поля, разрешает и запрещает. Когда бит установлен в deny, соответствующий бит в разрешении должен быть установлен 0 при определении разрешений пользователей.Самый эффективный способ установки бит в 0, когда 1 в другом поле

I.e. это должно быть так:

110101 (allow) 
    011001 (deny) 
= 100100 (result) 

я в настоящее время цикла каждый бит и делает сравнение, но мне интересно, если это может быть более элегантно выражены и быстрее исполнительский.

+0

Опишите действие, выполняемое на каждом бите. – starblue

ответ

7

Разве это не побито XOR?

(110101^011001) & 011001 = 100100 
+0

Пятно на, спасибо. – Sam

1

Предполагая, что битовое поле result обозначает «допустимую операцию», я думаю, что это должно быть побитовым И с перевернутой deny:

result = allow & ~deny

Я предполагаю, что это будет так быстро, как Pranav's answer, поскольку он также включает в себя две операции, но если вы можете прекомпотировать значения ~deny, это может быть быстрее. Лично я также считаю, что это решение легче понять.

Смежные вопросы