今天再复习一下计算机组成原理的知识,好久不看,几乎全忘了~^_#
float型浮点数占用四个字节,有如下格式:
符号位:0--->正;1--->负
指数位:采用移码表示
尾数位:可表示
24位二进制位的精度
double型浮点数占用八个字节,有如下格式:
符号位:0--->正;1--->负
指数位:采用移码表示
尾数位:可表示53位二进制位的精度
举个例子:
比如120.5f:
若为float型,转化成二进制科学计数法为:
1111000.1 = 1.1110001 * 26 = 1.11100010000000000000000 * 26
符号位为0
指数位为6,采用移码表示则将6 + 127 = 133,即为10000101
尾数位为11100010000000000000000(一共23位,不够23位的直接补0)
因此120.5f在内存中存储实际为:0 10000101 11100010000000000000000
也就是:0x42f10000
若120.5f为double型,转化为二进制科学计数法为:
1111000.1 = 1.1110001 * 26 = 1.1110001000000000000000000000000000000000000000000000 * 26
符号位为0
指数位为6,采用移码表示则将6 + 1023 = 1029,即为10000000101
尾数位为1110001000000000000000000000000000000000000000000000(一共52位,不够52位的直接补0)
因此120.5在内存中存储实际为:0 10000000101 1110001000000000000000000000000000000000000000000000
也就是:0x405e200000000000
相信通过例子应该很容易明白内存中浮点数如何存储的了~
可通过以下的例子进行验证:
1 #include <cstdio>
2
3 int main()
4 {
5 float tf = 120.5f;
6 double td = 120.5;
7 int *pf = (int *)&tf;
8 long long *pd = (long long *)&td;
9 printf("%x\n", *pf);
10 printf("%llx\n", *pd);
11 return 0;
12 }
posted on 2011-04-07 00:08
myjfm 阅读(1452)
评论(0) 编辑 收藏 引用 所属分类:
c/c++基础