c复习3 浮点数的秘密

c语言中浮点数有两种类型:float,double。他们在计算机内部的表示法相同,只有占用内存大小不同。float占4个字节,double占8个字节,所以表示的精度也不同。

浮点数在内存里表示法为符号位,指数,尾数(小数部分)



浮点数的小数位在内存里用2的负次幂的和表示,

1.能用有限位数表示的数(0.5,0.25,...的和得数)

比如10进制0.75 = 二进制 0.11  因为0.75是0.5和0.25的和。

2.不能用有限位数表示的数

比如0.1 = 二进制0.00011001....(这里可以看出浮点数并不精确)

浮点数的转换

1 .将浮点数转换为二进制

2.用科学计数法表示二进制浮点数

3.计算指数偏移后的值。

注意计算偏移值时要加上偏移量,而偏移量的值与类型有关,

对于指数3,偏移值如下

float 127+3 = 130

double 1023+3 = 1026;

举个例子8.25,用float表示

1,转换为2进制 1000.01

2,科学计数法1.00001*(2^3)

3,计算偏移值 127+3 = 130   =  10000010

符号0,指数10000010 小数00001

所以为0 10000010 00001000000000000000000  = 0x41040000

在int  和 float 中,他们占的内存一样但是表示的数的范围却不一样int【-2^31,2^31-1】

float【-3.4*10^38,3.4*10^38】。

1.float和int 表示的数的个数是一样的;

2.float的表示的数不是连续的,存在间隙(原因是不能用有限表示的数比如0.1 = 二进制0.00011001……);

3.float只是一种近似的表示法,不是精确的表示

4.由于表示复杂,所以运算速度比整型慢

double同理。

代码验证

int main()
{
 
    float f = 3.1415f;
    float fl = 123456789;
    
    printf("%0.10f\n", f);
    printf("%0.10f\n", fl);
    
    return 0;
}


学习交流群199546072

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值