Search code examples
cbit-manipulationoperation

Combine Set, Clear and Toggle in one line of C


I am trying to combine three bit operations in one line of C. For a 8 bit char, I have to set bits 2, 4, 6; clear bits 1, 3, 7 and toggle bit 0 and 5 all in one line code of C. I could do these in three line but I cannot combine these. Below is what I have done so far:

x= x & 0xD5;
x = x | 0x51;
x = x ^ 0x84;

They give the right answer for a given value of x. But I tried

x = (x & 0xD5) | (x | 0x51) | (x ^ 0x84)

And

x = x & 0xD5 | 0x51  ^ 0x84

Those do not work. Any suggestion would be appreciated.


Solution

  • It's simply this

    x = (((x & 0xD5) | 0x51) ^ 0x84)
    

    Your first try is wrong, because the values of x are not updated so all the operations work on the same value, besides oring the values is not equivalent to assigning the result of the operation to x.

    The second, is wrong because or operator precedence, so you just need parentheses.