Что '&' делает в C / C ++ и каков его эквивалентный оператор в perl? - PullRequest
3 голосов
/ 18 августа 2011

Я пишу Perl-реализацию протокола, спецификация которого дана для C / C ++, но я не знаю много C.

Что означает условие if ((flags & 0x400) != 0)? Как мне это сделать в Perl?

Правильно ли if ($flags == "\x400")?

Ответы [ 5 ]

6 голосов
/ 18 августа 2011

& - побитовое И.См. Битовые операторы .

Итак, flags обрабатывается как последовательность битов, а затем вы И это с чем-то, что имеет именно тот бит, который вы хотите проверить.Если результат не равен нулю, то бит установлен, иначе бит, на который вы смотрели, не установлен.В частности, в вашем примере 0x400 = 0100 0000 0000 используется для проверки, установлен ли 11-й бит (1) в flags.

Как правило, вы бы не использовали 0x400, но именованную константу,поэтому ясно, что представляет этот бит.

Так что if ($flags == "\x400") не правильно.См. Работа с битами в Perl .

Типичный пример маскирования битов можно увидеть в Разрешения файла Linux .

4 голосов
/ 18 августа 2011

Это побитовый оператор AND в C \ C ++ и Perl.

3 голосов
/ 18 августа 2011

Оператор & выполняет побитовое AND.В вашем случае if ((flags & 0x400) != 0) проверяет, не установлен ли одиннадцатый бит переменной flags на 0. Вы также можете выполнять побитовые операции в Perl .

2 голосов
/ 18 августа 2011

& - это битовый оператор и , в основном это тест для определения, установлен ли определенный бит в flags.Смотрите эквиваленты perl здесь: http://perldoc.perl.org/perlop.html#Bitwise-And

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