ieee浮点数c语言函数 ieee标准浮点数的计算

C语言中 printf(“%f\n”,3/2); 结果为多少?

运算结果是0。

郯城网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联公司于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司

这是因为3/2是一个整型数常量表达式,整型数常量表达式有编译器计算机运行的结果,3/2的商是1。这是编译器计算出来的3/2这个常量表达式的值,但是printf()要输出格式为%f,即输出一个单精度浮点数。在C语言中浮点数使用的是IEEE754编码,也就是说一个32位的int类型的数1,使用IEEE754编码所表示的数值是多少的问题。可以编写如下代码:

#include stdio.h

int main()

{

int i = 1;

float f = *(float *) i;

printf("%f\n", f);

return 0;

}

运行结果与问题中的

printf("%f\n",

2/3)是一样的,都为0。

要获得正确的结果,应该对整型常量表达式进行强制类型转换:

printf("%f\n", (float)(3/2));

C语言 浮点数问题

在C语言中,实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式,指数形式。上面列举的3个都是十进制小数形式,但十进制小数形式一般由实数的整数部分、小数点和小数部分表示,故上面的三个数中只有0.0是合法的

如何用C语言定义IEEE754标准的浮点数

C语言就是用IEEE 754标准

float 是 32 位 浮点数

double 是 64 位 浮点数

浮点数的字节内容可以用 union 破解:

union {

float x;

unsigned char s[4];

} F32;

F32.x = 1.23456;

for (i=0;i4;i++) printf("%x",F32.s[i]);

16进制1位拉4位,得 2进制内容。

union {

double y;

unsigned char t[8];

} F64;

F64.y = 1.23456;

for (i=0;i8;i++) printf("%x",F64.t[i]);

16进制1位拉4位,得 2进制内容。


网页名称:ieee浮点数c语言函数 ieee标准浮点数的计算
文章源于:http://azwzsj.com/article/dodpgoc.html