Поменять местами старший и младший байты в записи числа - C (СИ)
Формулировка задачи:
Здравствуйте!
Есть такая задача: дано целое число, поменять местами старший и младший байты в его записи и вывести что получится. Обязательное условие - использовать сдвиги.
Я сделал следующее:
Какие-то тесты проходит, какие-то нет; подскажите пожалуйста, в чём ошибка?
Спасибо!
int main() { unsigned int x; FILE *inf ; inf = fopen("in.txt", "rt"); fscanf (inf,"%i ",&x); x = ( (x >> 8) | (x << 8) ); printf("%10i \n", x); getchar(); return 0; }
Решение задачи: «Поменять местами старший и младший байты в записи числа»
textual
Листинг программы
unsigned long high8_to_low8 = (x >> 24) & 0xFF; unsigned long low8_to_high8 = (x & 0xFF) << 24; unsigned long middle16 = x & 0xFFFF00; x = low8_to_high8 + middle16 + high8_to_low8;
Объяснение кода листинга программы
В данном коде происходит преобразование байтов в число, а затем перестановка байтов в этом числе.
- Сначала старшие 8 бит числа (обозначим его как x) сдвигаются вправо на 24 позиции (x >> 24), при этом младшие 24 бита обнуляются. Результат этого выражения называется high8_to_low8.
- Затем младшие 8 бит числа сдвигаются влево на 24 позиции (x & 0xFF) << 24), при этом старшие 24 бита обнуляются. Результат этого выражения называется low8_to_high8.
- Далее число x обнуляется в диапазоне от 16-го до 31-го бита (x & 0xFFFF00).
- Наконец, полученные значения high8_to_low8, low8_to_high8 и middle16 объединяются в одно число (x = low8_to_high8 + middle16 + high8_to_low8). В результате этих операций число x изменяется таким образом, что его старший и младший байты меняются местами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д