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