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

Объяснение кода листинга программы

В данном коде происходит преобразование байтов в число, а затем перестановка байтов в этом числе.

  1. Сначала старшие 8 бит числа (обозначим его как x) сдвигаются вправо на 24 позиции (x >> 24), при этом младшие 24 бита обнуляются. Результат этого выражения называется high8_to_low8.
  2. Затем младшие 8 бит числа сдвигаются влево на 24 позиции (x & 0xFF) << 24), при этом старшие 24 бита обнуляются. Результат этого выражения называется low8_to_high8.
  3. Далее число x обнуляется в диапазоне от 16-го до 31-го бита (x & 0xFFFF00).
  4. Наконец, полученные значения high8_to_low8, low8_to_high8 и middle16 объединяются в одно число (x = low8_to_high8 + middle16 + high8_to_low8). В результате этих операций число x изменяется таким образом, что его старший и младший байты меняются местами.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.333 из 5
Похожие ответы