Представление числа float в двоичной системе - C (СИ)
Формулировка задачи:
Задачка такая - написать программу на
Си
!!!, которой мы задаем число типа float, а она выдает его нам так как его видит компьютер(в двоичной системе?).Решение задачи: «Представление числа float в двоичной системе»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main (void) {
- //Кропаем строку под вывод число типа float в двоичном нужного размера
- char* p;
- if(!(p= (char*)(malloc (sizeof(float)* 8+ 1))))
- printf ("всё плохо");
- //выделили строку
- //+++++++++++++++++++++++++++++++++++++++++++
- //прикол в т том, что я умею перводить в двоичную систему только числа int
- //ну или char на крайняк
- //но float не int, поэтому я щас сделаю буфер, куда тупо побайтно
- //перегоню float
- float f = 12.345;
- char* p_;
- if(!(p_= (char*)(malloc (sizeof(float)))))
- printf ("всё плохо");
- memmove (p_, &f, sizeof(float));
- //теперь в p_ просто набор нужных байт, который я туда перегнал,
- // с ним можно работать уже
- //кто может обойтись без этого буфера, пусть покажет как
- //+++++++++++++++++++++++++++++++++++++++++++
- //теперь побайтно с буфером работаем
- for (int i= 0; i< (int)sizeof(float); i++) {
- //именно (unsigned char) и никак иначе
- //каждый байт последжовательности перегоним сюда
- unsigned char temp_= (unsigned char)p_[i];
- //Это вот специальный буферик, куда мы будем запихивать двоичное представление
- //каждого байта
- char temp__ [8];
- //тут есть несколько способов как переводить int
- //в двоичную систему, я выбрал жёсткий
- //повторюсь: фактически, мы хоть и работаем с int
- //но работаем с ОДНИМ БАЙТОМ
- //а состальные байты- нулевые
- itoa (temp_, temp__, 2);
- //очередная грязь, которая нас поджидает: itoa убирает лидирующие ноли;
- int tem= strlen(temp__);
- memmove (&temp__ [8- strlen(temp__)], temp__,strlen(temp__));
- memset (temp__, '0', 8- tem);
- //теперь перегоним содержимое буферика куда надо:
- memmove (&p[8* i], temp__, 8);
- }
- p [sizeof(float)* 8]= 0;
- printf ("%s\n", p);
- getchar ();
- return 0;
- }
Объяснение кода листинга программы
- Подключаем необходимые библиотеки
- Объявляем переменную типа float и присваиваем ей значение 12.345
- Объявляем переменную типа char и присваиваем ей значение (char)malloc(sizeof(float))
- Используем memmove для копирования байтов из float в char*
- Используем цикл for для обработки каждого байта из float
- Преобразуем каждый байт в двоичную систему счисления используя itoa и сохраняем результат в отдельный массив
- Перемещаем байты из массива в нужное место в основной строке
- Добавляем нулевой символ в конец основной строки
- Выводим полученную строку на экран
- Ждем нажатия клавиши
- Возвращаем 0, завершая работу программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д