如何在 C 中仅设置字节的某些位而不影响其余位?

How do you set only certain bits of a byte in C without affecting the rest?

假设我有一个像 1010XXXX 这样的字节,其中 X 值可以是任何值。我想将低四位设置为特定模式,比如 1100,而高四位不受影响。我如何在 C 语言中以最快的速度做到这一点?


一般来说:

1
value = (value & ~mask) | (newvalue & mask);

mask 是一个值,所有要更改的位(并且只有它们)设置为 1 - 在您的情况下它将是 0xf 。 newvalue 是一个包含这些位的新状态的值 - 所有其他位基本上都被忽略了。

这适用于支持位运算符的所有类型。


您可以通过按位与设置将所有这些位设置为 0,其中 4 位设置为 0,所有其他位设置为 1(这是设置为 1 的 4 位的补码)。然后,您可以像往常一样按位或按位进行操作。

1
2
3
 val &= ~0xf; // Clear lower 4 bits. Note: ~0xf == 0xfffffff0
 val |= lower4Bits & 0xf; // Worth anding with the 4 bits set to 1 to make sure no
                          // other bits are set.


n


使用按位运算符或 |当您想将字节的位从 0 更改为 1.

使用位运算符和