data |= (1 << 3)
sets bit (3) without disrupting other bits. data &= ~(1 << 4)
resets bit (4) without disrupting other bits. How can I
It's not possible in a single instruction. This is because there are 3 possible operations you need to do on the different bits:
How can you select from one of three possibilities with a bitmask made up of binary digits?
Of course, you can do it with one line e.g:
data = (data | (1 << 3)) & ~(1 << 4)