Skip to content
Snippets Groups Projects
Commit 3bdc2879 authored by Sandipan Mohanty's avatar Sandipan Mohanty
Browse files

C++17 compatible binform for use in notebooks

parent f40bba52
No related branches found
No related tags found
No related merge requests found
#include <iostream>
#include <bitset>
#include <cstddef>
#include <iomanip>
namespace cxx2022 {
using byte = unsigned char;
template <class T>
auto bits(T var)
{
std::remove_cv_t<std::remove_reference_t<T>> loc{var};
unsigned long bytes{0UL};
byte* in = reinterpret_cast<byte *>(&loc);
byte* out = reinterpret_cast<byte *>(&bytes);
std::copy(in, in + sizeof(loc), out);
return std::bitset<8*sizeof(decltype(loc))>(bytes) ;
}
void showbits(double var)
{
std::cout << "bits for double value " << var << "\n";
auto b = bits(var).to_string();
std::cout << "raw = " << b << "\n";
std::cout << "sign exponent mantissa\n"
<< std::setw(6) << std::left << b[0]
<< std::setw(16) << std::left << b.substr(1UL, 11)
<< " " << b.substr(12) << "\n\n";
}
void showbits(float var)
{
std::cout << "bits for float value " << var << "\n";
auto b = bits(var).to_string();
std::cout << "raw = " << b << "\n";
std::cout << "sign exponent mantissa\n"
<< std::setw(6) << std::left << b[0]
<< std::setw(16) << std::left << b.substr(1UL, 8)
<< " " << b.substr(9) << "\n\n";
}
template <class T>
void showbits(T var)
{
std::cout << "bits for " << var << " with non-floating point type : " << bits(var) << "\n";
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment