Формат числа с плавающей запятой - double С/С++

18.05.2014 - Valentin Gubarev - Программирование - C/C++

Число двойной точности double поддерживается процессорами на аппаратном уровне. Модуль поддерживающий обработку таких чисел называют FPU (Floating Point Unit - Модуль Плавающей Запятой).

± Порядок
(11 бит)
Мантисса
(52 бита)
7 байт 6 байт 5 байт 4 байт 3 байт 2 байт 1 байт 0 байт
7 6 5 5 3 2 1 0 7 6 5 5 3 2 1 0 7 6 5 5 3 2 1 0 7 6 5 5 3 2 1 0 7 6 5 5 3 2 1 0 7 6 5 5 3 2 1 0 7 6 5 5 3 2 1 0 7 6 5 5 3 2 1 0
63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00

Формат числа определяет значение, которое в десятичной системе счисления будет равно ±1.мантисса × 2порядок-011111..11. Перед точкой, отделяющей целую часть от дробной всегда 1 и она в явном виде не хранится.

Ниже представлена программа на C/C++ выводящая побитого 8 байт числа double.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
void print(char *x){
    for (int i = 7; i >=0; --i)
        printf("%c", '0'+((*x >> i) & 1));
    printf(" ");
}
int main(){
    freopen("output.txt", "wt", stdout);
    double num;
    scanf("%lf", &num);
    for (int i = 7; i >=0; --i)
        print(((char*)&num)+i);
    return 0;
}

В архитектуре микропроцессоров Intel более старшие байты хранятся в более старших адресах, поэтому, для формирования в текстовом файле “output.txt” данных соотвтетсвующих рисунку на сайте цикл осуществлён от 7 до 0, а не от 0 к 7 (см. цикл for в main).

Лицензия Creative Commons
Code More Team - GitHub