2012-02-04 5 views
-1

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

O_o ​​спасибо!

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

+0

На почти любой системе сегодня символ имеет 8 бит, а не 4 бита. –

+0

это не для сегодняшних систем, это для завтрашнего экзамена;] – agoldis

+2

Где вы застряли? Если ваш экзамен будет заполнен этим материалом, код в http://graphics.stanford.edu/~seander/bithacks.html#BitReverseObvious - это место, где можно учиться. – sarnold

ответ

1

Это не возможно, учитывая ограничения только операторы <<, +, & и никто другой конструкции, кроме возврата.

Чтобы переместить 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); 
}