Я храню флаги в целом числе и хотел бы перевернуть определенные биты в определенных условиях.
Условие 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
Вы рассматривали Flag-Enum? Learn.microsoft.com/en-us/dotnet/csharp/language-reference/…





Вы можете использовать следующую функцию:
int ShiftOneBit(int value, int bit)
{
return (value & ~bit) | ((value & bit) >> 1);
}
Тогда используйте его вот так
x = ShiftOneBit(x, 0b100);
x = ShiftOneBit(x, 0b10000);