C语言中浮点数在内存中的存储方式

关于多字节数据类型在内存中的存储问题

int ,short 分别是4、2字节。他们在内存中的存储方式下面举个例子说明。
int data = 0xf4f3f2f1;
其中低位存放在编址小的内存单元,高位存放在编址高的内存单元
如下:
地址:0x8000        0x8001    0x8002    0x8003
数据:    f1                    f2                f3            f4
//上面是小端模式,还有大端存储模式
//
 
//
根据IEEE在1985年制定的标准来处理浮点数
单精度浮点数用4字节,包括1位符号位s(整数为0,负数为1),8位指数位e,23位有效位f
浮点型使用的是科学计数法,比如十进制的12345可以表示为1.2345 * 10^4(表示10的4次幂)
用二进制表示为 1.1000000111001 * 2^13
所以计算机中用浮点数表示12345这个十进制应该是这样的,s位为0,因为是正数,指数位为13+127=140(127为单精度浮点数偏移值,为了表示只有小数部分的数),有效位为1000000111001
计算的时候用 (-1)^s * 1.f * 2^(e-127) ,结果就是 1* 1.1000000111001 * 2^(140-127=13) ,和我们刚才表示的一样
还比如,十进制小数0.125转换为二进制小数0.001可以表示为 1* 1.0 * 2^(124-127=-3)
double,双精度浮点数有1位符号位、11位指数位和52位有效数

知道公式
n=(-1)^s*m*2^e
e=|E|-bias
bias = 2^(k-1)-1(k为E的位数)
m=|1.M|


知道12345在内存中的10进制表示以后
0x4640e400 = 0(100 0110 0)<100 0000 1110 0100 0000>
括号中的数字为|E| = 140 所以e=140-127=13
尖括号中的数字为m=|1.M|=|1.100000011100100|=1.506958008
ok,
代入公式n = (-1)^0*1.506958008*2^13=12345
完工!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值