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

假设我有一个像这个1010XXXX的字节,其中X值可以是任何东西。 我想将低4位设置为特定模式,比如1100,同时保持高4位不受影响。 如何在C中以最快的速度完成这项工作?

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

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. 

一般来说:

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

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

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

使用按位运算符或| 当你想将一个字节的位从0更改为1时。

当您想要将字节的位从1更改为0时,请使用按位运算符和&

 #include  int byte; int chb; int main() { // Change bit 2 of byte from 0 to 1 byte = 0b10101010; chb = 0b00000100; //0 to 1 changer byte printf("%d\n",byte); // display current status of byte byte = byte | chb; // perform 0 to 1 single bit changing operation printf("%d\n",byte); // Change bit 2 of byte back from 1 to 0 chb = 0b11111011; //1 to 0 changer byte byte = byte & chb; // perform 1 to 0 single bit changing operation printf("%d\n",byte); } 

也许有更好的方法,我不知道。 这对你现在有所帮助。