Por que o C não possui literais binários?

Eu freqüentemente estou desejando que eu pudesse fazer algo assim em c:

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

Ter esta sintaxe parece ser uma adição incrivelmente útil para C, sem desvantagens que eu possa pensar, e parece ser uma coisa natural para uma linguagem de baixo nível, onde o bit-twiddling é bastante comum.

Edit: Eu estou vendo algumas outras grandes alternativas, mas todas elas desmoronam quando há uma máscara mais complexa. Por exemplo, sereg&nbsp;é um registrador que controla os pinos de I / O em um microcontrolador, e eu quero colocar os pinos 2, 3 e 7 altos ao mesmo tempo em que eu poderia escreverreg = 0x46;&nbsp;mas eu tive que gastar 10 segundos pensando nisso (e eu provavelmente vou ter que gastar 10 segundos de novo toda vez que eu leio esses códigos depois de não olhar para ele por um dia ou dois) ou eu poderia escreverreg = (1 << 1) | (1 << 2) | (1 << 6);&nbsp;mas pessoalmente eu acho que isso é muito menos claro do que apenas escrever 'reg = 0b01000110;' Eu posso concordar que isso não vai muito além das arquiteturas de 8 bits ou talvez de 16 bits. Não que eu já tenha precisado fazer uma máscara de 32 bits.