Поменять местами старший и младший байты в записи числа - 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 изменяется таким образом, что его старший и младший байты меняются местами.