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

时间:2011-05-19 13:30:30

标签: 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'

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

2 个答案:

答案 0 :(得分:15)

n & ~1n的最低有效位替换为零; 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很容易做到。