vielleicht so:
data_b = (data_b & (~maske)) | (data_a & maske)

bei data_b werden alle Bits, bei denen die Maske auf 1 ist, gelöscht, bei data_a genau andersherum. Ich habe jetzt allerdings nicht überprüft, ob es wirklich funktioniert.

Viele Grüße,
Jan