浮点数存放格式

这里把二进制形式数的最右边一位叫做第0位,左边是第1位,依次类推。以下都是针对二进制来讨论的。

float32位的,第0~22位,共23位,是底数位。第23~30位,共8位,是指数位。第31位(最高位),是符号位,0为正,1为负,浮点数没有真正的0。指数位可以看作一个 8位的整型,减去 127 就是真正的指数。

float的储存方法:把二进制浮点数写出来(不能化为优先二进制小数的,小数部分位数就决定了精确度),如果整数部分大于1,就把小数点向左移动,使整数部分为1,设移动了(n-127)位;如果整数部分为0,就把小数点向右移动,使整数部分为1,设移动了(127-n)位。小数部分不足23位的在最右边补0,这就是底数位。把n化为有符号8位二进制数,这就是指数位。比如:浮点数1234.5,为正数,符号位为01234.5转化为二进制为10011010010.1。小数点向左移动10位,则n=137,即二进制的10001001。小数点移动后为1.00110100101,小数部分00110100101补全为23位就是00110100101000000000000

#include <stdio.h>

int main(void)

{    int t;   

union{float f;   int i; };

while (scanf("%f", &f))   

{      printf("   0x%08X/n", i);

t=i>>31&1;      printf("符号:0x%02X/n %s/n", t, t?"非正数":"非负数"); t=i>>23&255;  printf("指数:0x%08X/n   %+d/n", t, t-127);

t=i&8388607;  printf("尾数:0x%08X/n   %d/n", t, t);   

return 0;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值