Ответы:
Это побитовый оператор сокращения . |a & bозначает, что вы применяете логическое ИЛИ ко всем битам a(производя один бит), а затем делаете логическое И для этого бита и b. |aне имеет никакого эффекта, когда aодин бит.
Тем не менее, довольно часто можно увидеть побитовое уменьшение, применяемое к значениям одного бита. Одним типичным случаем является автоматически сгенерированный код, где фактическая ширина aможет зависеть от конфигурации. Другая возможность - это устаревший код, в котором aкогда-то было несколько битов. Когда значение aстало единичным битом, эта строка была технически правильной, так что теперь ненужный оператор сокращения остался в.