根据位掩码合并两个位域

hcp*_*ter 2 c bit-manipulation ansi bitmask

我想知道是否可以使用位操作根据位掩码合并两个位域?例如,我有两个值,一个位掩码:

char mask = 0x29; // 0010 1001
char a = 0x9;     // 0000 1001 original value
char b = 0xE8;    // 1110 1000 modified value
Run Code Online (Sandbox Code Playgroud)

我想根据位掩码将b中的位设置为a的值.只有3位会受到影响.

char val = 0xC9;  // 1100 1001 value
Run Code Online (Sandbox Code Playgroud)

那么我怎么能只做位操作呢?

提前致谢.

cni*_*tar 5

尝试类似的东西:

b &= ~mask;       /* Clear bits set in mask. */
b |= (mask & a);  /* Add bits set both in a and in mask. */
Run Code Online (Sandbox Code Playgroud)

此外,您可能希望使用unsigned类型而不是不确定的char.