зеркальные биты в char, ограниченные операторы +, <<, & не допускаются циклы, язык C - PullRequest
0 голосов
/ 04 февраля 2012

Подготовка к экзамену и застревание в этом вопросе: Допустимые операторы: <<,+,& без циклов разрешено и минимальные переменные температуры Напишите функцию на C, которая получает 4-битное число (char) и возвращает зеркальные (относительно центра) биты.Пример: дано b4,b3,b2,b1 return b1,b2,b3,b4

O_o спасибо!

это может быть не понятно, но инструменты общего языка разрешены ('==', если,>, <и т.д ..) </p>

1 Ответ

2 голосов
/ 04 февраля 2012

Это невозможно, учитывая ограничения только операторов <<, +, & и других конструкций, кроме 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);
}
...