Alez to jest zle. Chociazby dlatego, ze nie wiesz jak kompilator przetlumaczy to co napisales na assembler. Skad masz gwarancje, ze zapis np. x&0x0f nie zostanie przetlumaczony na x%0x0f? Oczywiscie ten przyklad jest bez sensu, ale w bardziej zlozonych sytuacjach nie masz zadnego przelozenia pomiedzy skladnia w C/C++ a generowanym kodem assemblerowym. Tak wiec jesli naprawde chcesz miec kontrole nad fragmentem kodu to nalezy go napisac w assemblerze, a nie liczyc, ze kompilator dla danej skladni wygeneruje okreslony kod.
Owszem, ale jesli bedzie mozliwe uproszczenie do operacji wycinania bitow to kompilator to zrobi, jesli nie bedzie mozliwe to czlowiek tez z tym nic nie zrobi. IMHO roznica jest wylacznie taka, ze szybciej sie o tym dowiesz.
Nie jest to zwiazane z promowaniem typow char/uchar na typy 16 bitowe, dla ktorych ustawianie i zerowanie pojedynczych bitow nie jest supportowane w assemblerze? Analogiczny problem istnieje w przypadku AVR, mozna go obejsc w sposob maloelegancki, albo elegancko robiac wstawke w assemblerze.
Jezeli masz taka krytyczna sekcje to IMHO jedynym eleganckim rozwiazaniem gwarantujacym otrzymanie oktreslonego kodu jest napisanie go po prostu w assemblerze. Jaka masz gwarancje, ze nowa wersja kompilatora ciagle bedzie sie zachowywac tak samo napotykajac na twoja "sztuczke"?