¿Por qué C no tiene literales binarios?

Con frecuencia estoy deseando poder hacer algo como esto en c:

val1 &= 0b00001111; //clear high nibble
val2 |= 0b01000000; //set bit 7
val3 &= ~0b00010000; //clear bit 5

Tener esta sintaxis parece ser una adición increíblemente útil a C, sin inconvenientes en los que puedo pensar, y parece ser algo natural para un lenguaje de bajo nivel en el que la manipulación de bits es bastante común.

Edit: Estoy viendo algunas otras grandes alternativas, pero todas se deshacen cuando hay una máscara más compleja. Por ejemplo, sireg es un registro que controla los pines de E / S en un microcontrolador, y quiero configurar los pines 2, 3 y 7 al mismo tiempo que podría escribirreg = 0x46; pero tuve que pasar 10 segundos pensando en ello (y probablemente tendré que pasar 10 segundos de nuevo cada vez que lea ese código después de no haberlo mirado durante uno o dos días) o podría escribirreg = (1 << 1) | (1 << 2) | (1 << 6); pero personalmente creo que es mucho menos claro que simplemente escribir `reg = 0b01000110; ' Estoy de acuerdo en que no se escala mucho más allá de las arquitecturas de 8 bits o quizás de 16 bits. No es que alguna vez haya necesitado hacer una máscara de 32 bits.

Respuestas a la pregunta(7)

Su respuesta a la pregunta