Задача из универа: Для числа типа float при выводе на экран его битового представления указать знаковый бит, порядок и мантиссу. Число вводят с клавиатуры.
Единственное до чего допер:
for (int k = 31; k > -1; k--) {
if (var&(1 << k)) {
cout << '1';
}
else cout << '0';
}
где var это само число. Это представление числа в бинарном виде. Косяк в том что только целого типа чисел, так как бинарные операции с float не работают.
Подскажите пожалуйста каким образом я могу получить бинарное представление числа типа float, будем считать что показать мантиссу порядок и знак, я сам справлюсь
Воплощаем на практике первый способ из ответа @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 - в обратную сторону.)
В языке С++ у вас есть две возможности рассмотреть бинарное представление объекта
unsigned char[] соответствующего размера. unsigned char[] соответствующего размера при помощи std::memcpy. Также, на большинстве традиционных платформ вы еще можете скопировать его через std::memcpy в объект целочисленного типа соответствующего размера, при условии, что данный целочисленный тип не имеет битов-заполнителей (padding bits) и запрещенных представлений (trap representations).
Способ с переинтерпретацей через union формально не является легальным в С++ (он разрешен только в С), но на практике скорее всего сработает и он.
Выбирайте, что вам больше нравится.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости