用逐位运算替换最低有效位

Emi*_*lio 7 binary bit-manipulation bit-shift boolean-operations

使用提供的位替换字节的最低有效位的最佳方法是什么?

我知道如何检查和比较最后一位(使用例如posix ffs()函数),但我想知道是否有更好性能的解决方案,而不检查替换位是0还是1.

该示例以python编写为伪代码,但我将在C中实现工作算法:

>>> bin(0b1)             # bit is  '0b1'
>>> bin(128)             # byte is '0b10000000'
>>> bin(129)             # byte is '0b10000001'

>>> bin(128 OPERATOR 0b1)       # Replace LSB with 1
'0b10000001'
>>> bin(128 OPERATOR 0b0)       # Keep LSB at 0
'0b10000000'

>>> bin(129 OPERATOR 0b1)       # Keep LSB at 1
'0b10000001'
>>> bin(129 OPERATOR 0b0)       # Replace LSB with 0
'0b10000000'
Run Code Online (Sandbox Code Playgroud)

显然,运算符可以是一组运算,但我正在寻找最优(最快)的方法.

NPE*_*NPE 15

n & ~1n用零替换最低有效位; n | 1,一个.

要替换LSB b,b可以使用0或1 (n & ~1) | b.

要更换k用个位b(这里k=0代表的是LSB) (n & ~(1 << k)) | (b << k).