Respuestas:
Este es un operador de reducción de bits . |a & b
significa que aplica un OR lógico a todos los bits de a
(produciendo un solo bit) y luego realiza un AND lógico de ese bit y b
. |a
no tiene efecto cuando a
es un solo bit.
Sin embargo, es bastante común ver una reducción en bits aplicada a valores de un solo bit. Un caso típico es el código generado automáticamente donde el ancho real a
puede depender de la configuración. Otra posibilidad es que este sea un código heredado donde a
una vez tuvo varios bits. Cuando se a
convirtió en un valor de un solo bit, esta línea seguía siendo técnicamente correcta, por lo que el operador de reducción ahora innecesario se quedó.