如何在C中的一行中设置多个位?

San*_*hoi 3 c bit-manipulation

我会写两行来设置,比如说,有些东西.这里,例如,我想将uint16_t值x中的高8位设置为y的低8位.

uint16_t y = 0x0034;
uint16_t x = 0xFF12;
Run Code Online (Sandbox Code Playgroud)

我想要x:

assert(x == 0x3412);
Run Code Online (Sandbox Code Playgroud)

我倾向于写这两行:

x &= 0x00FF;
x |= (y << 8);
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在不使用宏的情况下编写单行来实现相同的效果?

clc*_*cto 10

只需扩展两行:

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

// and combine

x = (x & 0xFF) | (y << 8);
Run Code Online (Sandbox Code Playgroud)