Dans mon application, j'essaie d'afficher la représentation en bits des variables doubles. Cela fonctionne pour les variables doubles plus petites. Ne fonctionne pas pour le niveau 10^30.Utiliser std :: bitset pour la représentation double
code:
#include <iostream>
#include <bitset>
#include <limits>
#include <string.h>
using namespace std;
void Display(double doubleValue)
{
bitset<sizeof(double) * 8> b(doubleValue);
cout << "Value : " << doubleValue << endl;
cout << "BitSet : " << b.to_string() << endl;
}
int main()
{
Display(1000000000.0);
Display(2000000000.0);
Display(3000000000.0);
Display(1000000000000000000000000000000.0);
Display(2000000000000000000000000000000.0);
Display(3000000000000000000000000000000.0);
return 0;
}
Sortie:
/home/sujith% ./a.out
Value : 1e+09
BitSet : 0000000000000000000000000000000000111011100110101100101000000000
Value : 2e+09
BitSet : 0000000000000000000000000000000001110111001101011001010000000000
Value : 3e+09
BitSet : 0000000000000000000000000000000010110010110100000101111000000000
Value : 1e+30
BitSet : 0000000000000000000000000000000000000000000000000000000000000000
Value : 2e+30
BitSet : 0000000000000000000000000000000000000000000000000000000000000000
Value : 3e+30
BitSet : 0000000000000000000000000000000000000000000000000000000000000000
Mon souci est pourquoi BITSET donne toujours 64, zéro pour plus tard 3. Fait intéressant "Cout" pour les valeurs réelles fonctionne comme prévu.
Une alternative au type-punning dans ce cas pourrait être bon vieux 'std :: memcpy'. – Angew
Vous devez utiliser C++ 14 pour obtenir un constructeur 'unsigned long long' pour' std :: bitset'. –