Задача из универа: Для числа типа 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
формально не является легальным в С++ (он разрешен только в С), но на практике скорее всего сработает и он.
Выбирайте, что вам больше нравится.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пытаюсь открыть файл, который находится на диске С, но выдает ошибки
У меня есть два jar файла, один лежит в lib, соответственно все работаетЕсть ли способ засунуть все это добро в один exe файл ?!
Необходимо сгенерировать url типа /address?id=1¶m=VAL1,VAL2 Пытаюсь отправить param: