ja często chcąc mogłem zrobić coś takiego w C:Dlaczego C nie ma literałów binarnych?
val1 &= 0b00001111; //clear high nibble
val2 |= 0b01000000; //set bit 7
val3 &= ~0b00010000; //clear bit 5
Mając tę składnię wydaje się niezwykle użytecznym dodatkiem do C bez wad, że mogę myśleć, i wydaje się, że naturalną rzeczą dla język niskiego poziomu, w którym bit-twiddling jest dość powszechny.
Edycja: Widzę kilka innych wspaniałych alternatyw, ale wszystkie one rozpadać, gdy jest bardziej skomplikowana maska. Na przykład, jeśli reg
jest rejestrem, który kontroluje szpilki I/O mikrokontrolera, i chcę ustawić styki 2, 3 i 7 na wysokim poziomie w tym samym czasie mógłbym napisać reg = 0x46;
ale musiałem spędzić 10 sekund o tym myśleć (i prawdopodobnie będę musiał spędzić 10 sekund ponownie za każdym razem, gdy czytam ten kod po tym, jak nie patrzę na niego przez dzień lub dwa) lub mogę napisać reg = (1 << 1) | (1 << 2) | (1 << 6);
, ale osobiście uważam, że jest to o wiele mniej jasne niż pisanie `reg = 0b01000110 ; " Mogę się zgodzić, że nie skaluje się to jednak znacznie poza architektury 8-bitowe lub 16-bitowe. Nie, żebym kiedykolwiek musiał zrobić maskę 32-bitową.
ma hex, który moim zdaniem jest jeszcze lepszy, jeśli spędzasz 10 minut na odczuwaniu związku – vroomfondel
Czy ten ostatni komentarz powinien brzmieć "clear bit 4"? (Albo jeszcze lepiej "czysty bit 3", skoro programiści powinni domyślnie policzyć od zera?) – Nemo
IMHO, ponieważ jest hex. Znacznie łatwiejsze w obsłudze programisty niż liczby binarne. Jest bardzo podatny na błędy. Nie ważne jak bardzo jesteś doświadczony. –