Search code examples
cbit-manipulation

How can I set multiple bits in one line in C?


I'd write two lines to set, say, some bits to something. Here, for example, I want to set the upper 8 bits in uint16_t value x to y's lower 8 bits.

uint16_t y = 0x0034;
uint16_t x = 0xFF12;

I want to have x:

assert(x == 0x3412);

I tend to write these two lines:

x &= 0x00FF;
x |= (y << 8);

Is there a way of writing a single line to achieve the same effect without using a macro?


Solution

  • Just expand out the two lines:

    x &= 0x00FF; // x = x & 0xFF
    x |= (y<<8); // x = x | (y<<8)
    
    // and combine
    
    x = (x & 0xFF) | (y << 8);