What is a optimal way to replace the Least Significant Bit of a byte, with a provided bit?
I know how to do checking and comparing last bit (using for example posix ffs() function), but I want to know if there are solutions with better performance, without checking if replacing bit is 0 or 1.
The example is written in python as pseudocode, but I will implement the working algorithm in 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'
Obviously operator can be a set of operations, but I'm looking for the optimal (fastest) method.
n & ~1
replaces the least significant bit of n
with zero; n | 1
, with one.
To replace the LSB with b
, where b
can be either 0 or 1, you can use (n & ~1) | b
.
To replace the k
-th bit with b
(where k=0
stands for the LSB): (n & ~(1 << k)) | (b << k)
.