Рубин бит стучит, как выполнять аддитивную и негативную - PullRequest
2 голосов
/ 09 марта 2011

У меня есть 2 коллекции битовых масок, 1 имеет разрешения, которые я хочу объединить, а другая коллекция имеет битовые маски, которые я хочу удалить.

Для добавок, я просто 'ИЛИ' их как:

permissions = 0
add_masks.each do |x|
 permissions |= permissions
end

Как мне удалить разрешения, используя другую коллекцию?

remove_masks.each do |x|
    ???
end

Ответы [ 2 ]

6 голосов
/ 09 марта 2011

Вы хотите использовать permissions &= ~mask:

irb > permissions = 0
 # => 0 
irb > permissions |= 512
 # => 512 
irb > permissions |= 256
 # => 768 
irb > permissions &= ~1
 # => 768 
irb > permissions &= ~256
 # => 512 
irb > permissions &= ~512
 # => 0 
0 голосов
/ 09 марта 2011

~(~a|b) - побитовое вычитание b из a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...