首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEEE浮点表示法

IEEE浮点表示法
EN

Stack Overflow用户
提问于 2011-05-19 22:40:08
回答 3查看 781关注 0票数 2

我已经创建了以下程序来查找浮点数的位模式。但我得到了不同的结果,然后我计算了一下:

代码语言:javascript
复制
#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;
}

它给出了输出:

代码语言:javascript
复制
-74

-13

-99

63

1.234000 1.234000e+00

这是什么意思,因为我期望位模式为:

00111111 10111011 11100111 0110110

我哪里错了,请纠正我

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-19 22:49:09

我不知道你是从哪弄来的。

对于IEEE-754,1.234等同于0x3F9DF3B6的底层表示(参见例如http://babbage.cs.qc.edu/IEEE-754/Decimal.html)。所以我们有:

代码语言:javascript
复制
0x3F = 00111111 =  63
0x9D = 10011101 = -99 (as a signed char)
0xF3 = 11110011 = -13
0xB6 = 10110110 = -74

根据您的系统字节顺序,您可能会发现这些字节以另一种顺序出现。

票数 5
EN

Stack Overflow用户

发布于 2011-05-19 22:43:20

标准C中没有内置的二进制printf格式。如果这是您想要的输出格式,您需要编写自己的格式。您可以通过使用%x查看十六进制输出来更近一步;也许这会得到您需要的东西?

票数 1
EN

Stack Overflow用户

发布于 2011-05-19 23:00:22

您期望的位模式是错误的,它应该是:

代码语言:javascript
复制
{"00111111", "10011101", "11110011", "10110110"} = {63, -99, -13, -74}

它所产生的数字和你得到的完全一样。

符号、指数和有效值为: 0、127、1962934

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6060393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档