Представление числа float в двоичной системе - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задачка такая - написать программу на

Си

!!!, которой мы задаем число типа float, а она выдает его нам так как его видит компьютер(в двоичной системе?).

Решение задачи: «Представление числа float в двоичной системе»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main (void) {
  6.  
  7.   //Кропаем строку под вывод число типа float в двоичном нужного размера
  8.   char* p;
  9.   if(!(p= (char*)(malloc (sizeof(float)* 8+ 1))))
  10.    printf ("всё плохо");
  11.   //выделили строку
  12.  
  13.  
  14.   //+++++++++++++++++++++++++++++++++++++++++++
  15.  
  16.  
  17.   //прикол в т том, что я умею перводить в двоичную систему только числа int
  18.   //ну или char на крайняк
  19.   //но float не int, поэтому я щас сделаю буфер, куда тупо побайтно
  20.   //перегоню float
  21.   float f = 12.345;
  22.   char* p_;
  23.   if(!(p_= (char*)(malloc (sizeof(float)))))
  24.    printf ("всё плохо");
  25.   memmove (p_, &f, sizeof(float));
  26.   //теперь в p_ просто набор нужных байт, который я туда перегнал,
  27.   // с ним можно работать уже
  28.   //кто может обойтись без этого буфера,  пусть покажет как
  29.  
  30.  
  31.   //+++++++++++++++++++++++++++++++++++++++++++
  32.  
  33.  
  34.   //теперь побайтно с буфером работаем
  35.   for (int i= 0; i< (int)sizeof(float); i++) {
  36.    
  37.    //именно (unsigned char) и никак иначе
  38.    //каждый байт последжовательности перегоним сюда
  39.    unsigned char temp_= (unsigned char)p_[i];
  40.    
  41.  
  42.    //Это вот специальный буферик, куда мы будем запихивать двоичное представление
  43.    //каждого байта
  44.    char temp__ [8];
  45.  
  46.  
  47.    //тут есть несколько способов как переводить int
  48.    //в двоичную систему, я выбрал жёсткий
  49.    //повторюсь: фактически, мы хоть и работаем с int
  50.    //но работаем с ОДНИМ БАЙТОМ
  51.    //а состальные байты- нулевые
  52.    itoa (temp_, temp__, 2);
  53.    
  54.    //очередная грязь, которая нас поджидает: itoa убирает лидирующие ноли;
  55.    int tem= strlen(temp__);
  56.    memmove (&temp__ [8- strlen(temp__)], temp__,strlen(temp__));
  57.    memset  (temp__, '0', 8- tem);
  58.  
  59.  
  60.    //теперь перегоним содержимое буферика куда надо:
  61.    memmove (&p[8* i], temp__, 8);        
  62.    
  63.   }
  64.   p [sizeof(float)* 8]= 0;
  65.   printf ("%s\n", p);
  66.  
  67.  
  68.   getchar ();
  69.   return 0;
  70. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы