IEEE представление с плавающей точкой - PullRequest
2 голосов
/ 19 мая 2011

Я создал следующую программу, чтобы найти битовую комбинацию чисел с плавающей запятой.но я получил другое, тогда я рассчитал:

#include<stdio.h>

int main(void){
    float f = 1.234;
    char *ch;
    ch = (char *)(&f);
    printf("\n%d\n", *ch);
    ch++;
    printf("\n%d\n", *ch);
    ch++;
    printf("\n%d\n", *ch);
    ch++;
    printf("\n%d\n", *ch);

//  printf("%d %d %d %d", *ch, *(ch+1), *(ch+2), *(ch+3));
    printf("\n%f %e", f, f);
    return 0;
}

Это дает мне вывод:

-74

-13

-99

63

1.234000 1.234000e+00

Что это значит, потому что я ожидал битовый шаблон как:

00111111 10111011 11100111 0110110

где я не прав пожалуйста поправьте меня

Ответы [ 3 ]

4 голосов
/ 19 мая 2011

Я не уверен, откуда у вас этот битовый паттерн.

Для IEEE-754 1.234 эквивалентно базовому представлению 0x3F9DF3B6 (см., Например, http://babbage.cs.qc.edu/IEEE-754/Decimal.html). Итак, мы имеем:

0x3F = 00111111 =  63
0x9D = 10011101 = -99 (as a signed char)
0xF3 = 11110011 = -13
0xB6 = 10110110 = -74

В зависимости от порядкового номера вашей системы вы можете обнаружить, что эти байты располагаются в другом порядке.

1 голос
/ 19 мая 2011

Нет двоичного printf формата, встроенного в стандартный C. Вам нужно будет написать свой собственный, если вы хотите выходной формат. Вы можете приблизиться, используя %x, чтобы увидеть шестнадцатеричный вывод; может быть, это даст вам то, что вам нужно?

0 голосов
/ 19 мая 2011

Битовый массив, который вы ожидаете, неверен, он должен быть:

{"00111111", "10011101", "11110011", "10110110"} = {63, -99, -13, -74}

, который выдает именно те числа, которые вы получили.

Знак, показатель степени и значащий: 0, 1271962934

...