Это невозможно, учитывая ограничения только операторов <<, +, &
и других конструкций, кроме return.
Чтобы переместить b3 из 3-й позиции во 2-ю позицию, вам потребуется способ смещения вправо, для чего требуется что-то вроде >> или /. Ни один из представленных операторов не может использоваться с b3 для установки 2-й или 1-й позиции бита.
, если вы можете использовать операторы if и оператор присваивания =
, это возможно. Затем вы можете написать грязное решение, такое как
char flip(char c)
{
char f;
f = (c & 1) << 3 + (c & 2) << 1;
if (c & 4)
f = f + 2;
if (c & 8)
f = f + 1;
return f;
}
Более уродливый, но короткий укрывной слой, если вы можете использовать оператор if
?
.
char flip(char c)
{
return (c & 1) << 3 + (c & 2) << 1 + ((c & 4) ? 2 : 0) + ((c & 8) ? 1 : 0);
}