Представление числа 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;
}

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

  1. Подключаем необходимые библиотеки
  2. Объявляем переменную типа float и присваиваем ей значение 12.345
  3. Объявляем переменную типа char и присваиваем ей значение (char)malloc(sizeof(float))
  4. Используем memmove для копирования байтов из float в char*
  5. Используем цикл for для обработки каждого байта из float
  6. Преобразуем каждый байт в двоичную систему счисления используя itoa и сохраняем результат в отдельный массив
  7. Перемещаем байты из массива в нужное место в основной строке
  8. Добавляем нулевой символ в конец основной строки
  9. Выводим полученную строку на экран
  10. Ждем нажатия клавиши
  11. Возвращаем 0, завершая работу программы

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


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

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

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