Warum hat C keine binären Literale?
Ich wünsche mir oft, ich könnte so etwas in c:
val1 &= 0b00001111; //clear high nibble
val2 |= 0b01000000; //set bit 7
val3 &= ~0b00010000; //clear bit 5
Diese Syntax scheint eine unglaublich nützliche Ergänzung zu C zu sein, ohne dass mir Nachteile einfallen, und es scheint eine natürliche Sache für eine einfache Sprache zu sein, in der Bit-Twiddling ziemlich verbreitet ist.
Bearbeiten: Ich sehe einige andere großartige Alternativen, aber sie fallen alle auseinander, wenn es eine komplexere Maske gibt. Zum Beispiel, wennreg
ist ein Register, das die E / A-Pins eines Mikrocontrollers steuert, und ich möchte die Pins 2, 3 und 7 gleichzeitig auf Hoch setzen, wenn ich schreiben könntereg = 0x46;
Aber ich musste 10 Sekunden darüber nachdenken (und ich muss wahrscheinlich jedes Mal 10 Sekunden dafür aufwenden, wenn ich diesen Code lese, nachdem ich ihn ein oder zwei Tage nicht angesehen habe), oder ich konnte schreibenreg = (1 << 1) | (1 << 2) | (1 << 6);
aber ich persönlich denke, das ist weitaus weniger klar als nur "reg = 0b01000110;" Ich kann dem zustimmen, dass es nicht gut über 8-Bit- oder vielleicht 16-Bit-Architekturen skaliert. Nicht, dass ich jemals eine 32-Bit-Maske erstellen müsste.