用提供的位替换字节的最低有效位的最佳方法是什么?
我知道如何检查和比较最后一位(例如使用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'
显然,运算符可以是一组运算,但是我正在寻找最佳(最快)方法。
最佳答案
n & ~1
用零替换n
的最低有效位; n | 1
,一个。
要将LSB替换为b
(其中b
可以为0或1),可以使用(n & ~1) | b
。
要将k
-th位替换为b
(其中k=0
代表LSB):(n & ~(1 << k)) | (b << k)
。
关于binary - 用按位运算替换最低有效位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6059454/