Поменять местами 4 старших байта и 4 младших в числе double (указатели) - C (СИ)
Формулировка задачи:
Задача следующая:
дано число типа double. С помощью указателей поменять местами 4 первых и 4 последний байта в этом числе не переводя его в двоичную систему (оно же в памяти компьютера и так там в двоичной записи храниться)
Решение задачи: «Поменять местами 4 старших байта и 4 младших в числе double (указатели)»
textual
Листинг программы
#include <stdio.h>
int
main(int argc, char** argv)
{
double lovely_number = -99.18;
printf("%lf\n", lovely_number);
char* iter = (char*) &lovely_number;
char tmp;
size_t num_len = sizeof lovely_number;
size_t hlf_len = num_len / 2;
size_t i;
for (i = 0; i < hlf_len; ++i) {
tmp = iter[ i ];
printf("%c\n", tmp);
iter[ i ] = iter[ num_len - i - 1 ];
iter[ num_len - i - 1 ] = tmp;
}
printf("%lf\n", lovely_number);
return 0;
}
Объяснение кода листинга программы
- Подключение стандартной библиотеки ввода-вывода
- Объявление переменных:
- lovely_number (тип double)
- iter (тип char*)
- Инициализация lovely_number значением -99.18
- Вывод значения lovely_number на экран
- Приведение указателя на double к указателю на char (iter)
- Определение переменной tmp типа char
- Определение переменной num_len типа size_t, которая содержит размер переменной lovely_number
- Определение переменной hlf_len типа size_t, которая содержит половину размера переменной lovely_number
- Определение переменной i типа size_t, которая используется в цикле
- Цикл for для перебора первых hlf_len символов (или байтов) в переменной lovely_number
- В каждой итерации цикла меняются местами два символа (или байта) в переменной lovely_number
- После завершения цикла выводится обновленное значение lovely_number
- Возврат 0, что означает успешный конец работы программы