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