Самый простой способ получить это - memcpy
двойное в массив char
:
char double_as_char[sizeof(double)];
memcpy(double_as_char, &noToConvert, sizeof(double_as_char));
, а затем извлечь биты из double_as_char
. C и C ++ определяют это в стандарте как легальное.
Теперь, если вы действительно хотите извлечь различные компоненты double
, вы можете использовать следующее:
sign= noToConvert<=-0.0f;
int exponent;
double normalized_mantissa= frexp(noToConvert, &exponent);
unsigned long long mantissa= normalized_mantissa * (1ull << 53);
Поскольку значение, возвращаемое frexp
, находится в [0.5, 1)
, вам необходимо сдвинуть его на один дополнительный бит, чтобы получить все биты в мантиссе в виде целого числа. Затем вам просто нужно отобразить это в двоичном представлении, которое вы хотите, хотя вы должны будете скорректировать показатель степени, чтобы включить также неявное смещение.