bitwise для новичка

alexblade

Новичок
пытаясь понять природу битовой сущности, в частности наткнулся на https://habrahabr.ru/post/134557/
и у меня возник вопрос о проверки значения бита

примем U_ALL за 1111 //все права
а U_READ за 0001 //чтение
и $user_perm = U_ALL

то
if($user_perm & U_READ) // есть ли право чтения?

я понимаю как
((1111) & (0001)) = 0001
то имеем if(0001) {}
и как тогда if может понять из 0001 есть ли у нас права чтения или нет, как из 0001 мы получаем TRUE и FALSE для срабатывания обработчика условий ?
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Потому что если ты делаешь операции только вида "битмаска & один бит", во всех случаях, если права нет, получится 0.
Можешь сам проверить перебором вариантов, но достаточно чистой логики.
В бит-константах все нули, кроме того права, которое тебя интересует.
Соответственно при & с битмаской везде, кроме интересующего нас права, будут автоматически нули: 0 & что угодно = 0, и все сводится к сравнению того одного бита, где интересующее нас право.
 
Сверху