重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
运算结果是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语言中,实数只采用十进制。它有二种形式:十进制小数形式,指数形式。上面列举的3个都是十进制小数形式,但十进制小数形式一般由实数的整数部分、小数点和小数部分表示,故上面的三个数中只有0.0是合法的
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进制内容。