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

bit-manipulation, c

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);

Problem

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?

Original source