Wieso sollte gerade das erste Bit nicht passen?

Meine Variante liefert zu den Werten
uint8_t maske = 0b01111000;
uint8_t data_a = 0b01011000;
uint8_t data_b = 0b10101010;
das Ergebnis 0b11011010.

Das stimmt zwar nicht mit dem von Tyrald genannten (0b01011010) überein, aber das Bit an erster Stelle ist in der Maske 0, b wird an dieser Stelle also nicht von a überschrieben, bleibt also 1.