тип float в бинарный вид C++

187
02 июня 2019, 12:40

Задача из универа: Для числа типа float при выводе на экран его битового представления указать знаковый бит, порядок и мантиссу. Число вводят с клавиатуры.

Единственное до чего допер:

for (int k = 31; k > -1; k--) {
        if (var&(1 << k)) {
            cout << '1';
            }
        else cout << '0';
    }

где var это само число. Это представление числа в бинарном виде. Косяк в том что только целого типа чисел, так как бинарные операции с float не работают.

Подскажите пожалуйста каким образом я могу получить бинарное представление числа типа float, будем считать что показать мантиссу порядок и знак, я сам справлюсь

Answer 1

Воплощаем на практике первый способ из ответа @AnT:

#include <bitset>
#include <iostream>
int main()
{
    float x = 3.14;
    for (int i = sizeof(x)-1; i >= 0; i--)
        std::cout << std::bitset<8>(reinterpret_cast<char*>(&x)[i]);
    std::cout << '\n';
}

(Такой порядок обхода - для little-endian платформ. Для big endian - в обратную сторону.)

Answer 2

В языке С++ у вас есть две возможности рассмотреть бинарное представление объекта

  1. Переинтерпретировать его как массив unsigned char[] соответствующего размера.
  2. Скопировать его в самостоятельный массив unsigned char[] соответствующего размера при помощи std::memcpy.

Также, на большинстве традиционных платформ вы еще можете скопировать его через std::memcpy в объект целочисленного типа соответствующего размера, при условии, что данный целочисленный тип не имеет битов-заполнителей (padding bits) и запрещенных представлений (trap representations).

Способ с переинтерпретацей через union формально не является легальным в С++ (он разрешен только в С), но на практике скорее всего сработает и он.

Выбирайте, что вам больше нравится.

READ ALSO
Не линкуется библиотека xblas

Не линкуется библиотека xblas

Собрал библиотеку по инструкции с сайта следующими командами:

144
Ошибка при использование команды fin.open() и getline

Ошибка при использование команды fin.open() и getline

Пытаюсь открыть файл, который находится на диске С, но выдает ошибки

143
jar с внешними банками в exe

jar с внешними банками в exe

У меня есть два jar файла, один лежит в lib, соответственно все работаетЕсть ли способ засунуть все это добро в один exe файл ?!

160
JSoup проблема с запятой

JSoup проблема с запятой

Необходимо сгенерировать url типа /address?id=1&param=VAL1,VAL2 Пытаюсь отправить param:

158