使用提供的位替换字节的最低有效位的最佳方法是什么?
我知道如何检查和比较最后一位(使用例如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'
显然,运算符可以是一组运算,但我正在寻找最优(最快)的方法。
答案 0 :(得分:15)
n & ~1
将n
的最低有效位替换为零; n | 1
,只有一个。
要使用b
替换LSB,其中b
可以是0或1,您可以使用(n & ~1) | b
。
将k
位替换为b
(其中k=0
代表LSB):(n & ~(1 << k)) | (b << k)
。
答案 1 :(得分:0)
您还可能想要检查您是使用big endian还是little endian架构。在大端机器中,最低有效字节位于最高地址。
在Python中,您可以通过
检查字符串sys.byteorder
在C中你需要自己检查endian-ness,使用unions很容易做到。