8

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

我知道如何检查和比较最后一位(例如使用 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'

显然 operator 可以是一组操作,但我正在寻找最佳(最快)的方法。

4

2 回答 2

19

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

要将 LSB 替换为b,其中b可以是 0 或 1,您可以使用(n & ~1) | b.

k第 - 位替换为b(其中k=0代表 LSB):(n & ~(1 << k)) | (b << k).

于 2011-05-19T13:32:22.830 回答
0

您可能还想检查您是使用大端还是小端架构。在大端机器中,最低有效字节位于最高地址。

在 Python 中,您可以通过以下方式检查字节序

系统字节序

在 C 语言中,您需要自己检查字节序,使用联合进行破解很容易。

于 2011-05-19T13:38:18.713 回答