随笔-80  评论-24  文章-0  trackbacks-0

今天再复习一下计算机组成原理的知识,好久不看,几乎全忘了~^_#

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++基础

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理