假设我有一个类似于1010XXXX的字节,其中X值可以是任何值.我想将低4位设置为特定模式,比如1100,同时保持高4位不受影响.如何在C中以最快的速度完成这项工作?
thk*_*ala 45
一般来说:
value = (value & ~mask) | (newvalue & mask);
Run Code Online (Sandbox Code Playgroud)
mask是一个值,所有要更改的位(并且只有它们)设置为1 - 在您的情况下它将是0xf.newvalue是一个包含这些位的新状态的值 - 所有其他位基本上都被忽略.
这适用于支持按位运算符的所有类型.
Goz*_*Goz 14
您可以通过按位设置将所有这些位设置为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.
Run Code Online (Sandbox Code Playgroud)