@dmasloff

Как получить битовое представление типа double в C++?

Необходимо получить битовое представление типа double в C++. Как это можно сделать с помощью встроенной функции откуда-нибудь или с помощью ручного получения знака, мантиссы и порядка?
  • Вопрос задан
  • 1147 просмотров
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Идея в том, что в double 64 бита. Так что если мы воспользуемся type punning и наложим сверху дабла uint64_t, в котором тоже 64 бита, мы получим 64 битное целое число, содержащее в себе биты исходного дабла.

*reinterpret_cast(&a)

Далее, мы используем стандартный трюк с std::bitset для перевода числа в строку, содержащую его двоичное представление

И потом пара полезных фактов:
- мы выводим число и его же, но со знаком минус. Можно видеть, что знак хранится в первом бите.
- аналогично, можем посмотреть, в каких битах хранится экспонента, посмотрев на a, 2*a, 4*a
#include <iostream>
#include <bitset>
using namespace std;

void printBits(const double a)
{
	cout << bitset<64>(*reinterpret_cast<const uint64_t*>(&a)) << endl;
}

int main() 
{
    const double a = 3.14;
    printBits(a);
    printBits(-a);
    printBits(a*2);
    printBits(a*4);
    return 0;
}
0100000000001001000111101011100001010001111010111000010100011111
1100000000001001000111101011100001010001111010111000010100011111
0100000000011001000111101011100001010001111010111000010100011111
0100000000101001000111101011100001010001111010111000010100011111

Ideone
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы