我将标志存储在整数中,并且我想在某些条件下翻转特定位。
条件1
if bit 3 is true then
set bit 3 to false
set bit 2 to true
end if
条件2
if bit 5 is true then
set bit 5 to false
set bit 4 to true
end if
所有其他位应保持不变。
条件1和条件2是独立的。
场景
int input_01 = 0b_10101010_10_10_1 // condition 1 and condition 2
int input_02 = 0b_10101010_00_10_1 // condition 1
int input_03 = 0b_10101010_10_00_1 // condition 2
int input_04 = 0b_10101010_01_01_1 // nothing
// apply solution on inputs above to get expected below
// it could be 1 or 2 operations max
int expected_01 = 0b_10101010_01_01_1
int expected_02 = 0b_10101010_00_01_1
int expected_03 = 0b_10101010_01_00_1
int expected_04 = 0b_10101010_01_01_1
您可以使用以下功能:
int ShiftOneBit(int value, int bit)
{
return (value & ~bit) | ((value & bit) >> 1);
}
然后这样使用
x = ShiftOneBit(x, 0b100);