binary - 用按位运算替换最低有效位

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

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

最佳答案

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/

相关文章:

c++ - 使用 ios::binary 从标准中读取

c - 在 C 中使用按位运算的 2 位映射

c++ - 如何从内存中正确读取数据(memcpy)

c - 高效地对 int 数组进行位移?

c++ - 为什么将 int 向上移位会产生负数?

algorithm - 我们为什么要使用 Base64?

binary - Verilog,与变量的不相等位进行比较

c - `fwrite()` 后的最后一个字节是什么意思?

language-agnostic - 什么是按位移位(bit-shift)运算符以及它们如何工作?

java - 如何从java中的int中获取最重要的n位