如何使用 C# 在一次操作中翻转位?

问题描述 投票:0回答:1

我将标志存储在整数中,并且我想在某些条件下翻转特定位。

条件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
c# bit-manipulation bit
1个回答
0
投票

您可以使用以下功能:

int ShiftOneBit(int value, int bit)
{
    return (value & ~bit) | ((value & bit) >> 1);
}

然后这样使用

x = ShiftOneBit(x, 0b100);
© www.soinside.com 2019 - 2024. All rights reserved.