| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 484 人关注过本帖
标题:关于数在计算机中的表示
只看楼主 加入收藏
Hujc71
Rank: 2
等 级:论坛游民
帖 子:49
专家分:65
注 册:2010-3-31
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
关于数在计算机中的表示
我们知道,计算机中的数字有原码,补码,反码,但是你输入一个怎样确定是什么表示方式呢?
还有一个数既然有这么多的表示方式,那计算机是怎样迅速处理的呢?
见最高位是1的就是反码吗?真的好困惑。。。
忘高人详细指教,可以给相关文章的链接。。。
搜索更多相关主题的帖子: 计算机 
2010-04-02 20:20
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:7 
在计算机中数的表示分两类:整型数和浮点数
整型数表示:正数用原码(最高位为0,其他位为此数所化二进制数)表示,负数用补码(最高位为1,其他位为该数的补码:原码取反加1所得)表示。
    下面的程序可以显示十进制整数10和-10的机内表示(32位机)
程序代码:
#include<stdio.h>
struct bs
{
unsigned p:1;
unsigned o:1;
unsigned n:1;
unsigned m:1;
unsigned l:1;
unsigned k:1;
unsigned j:1;
unsigned i:1;
unsigned h:1;
unsigned g:1;
unsigned f:1;
unsigned e:1;
unsigned d:1;
unsigned c:1;
unsigned b:1;
unsigned a:1;
unsigned p1:1;
unsigned o1:1;
unsigned n1:1;
unsigned m1:1;
unsigned l1:1;
unsigned k1:1;
unsigned j1:1;
unsigned i1:1;
unsigned h1:1;
unsigned g1:1;
unsigned f1:1;
unsigned e1:1;
unsigned d1:1;
unsigned c1:1;
unsigned b1:1;
unsigned a1:1;
};
prunsigned(struct bs * x)
{
printf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",x->a1,x->b1,x->c1,x->d1,x->e1,x->f1,x->g1,x->h1,x->i1,x->j1,x->k1,x->l1,x->m1,x->n1,x->o1,x->p1);
printf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n",x->a,x->b,x->c,x->d,x->e,x->f,x->g,x->h,x->i,x->j,x->k,x->l,x->m,x->n,x->o,x->p);
}
int main()
{
struct bs *n;
int m=10;
n=(struct bs *)&m;
prunsigned(n);
m=-10;
prunsigned(n);
}
浮点数表示:分为阶码和尾数,例如32位浮点数:规定第0位表示符号,1~8位表示阶码,第9~31位表示尾数。
例如-0.34375的机内表示为:(2进制数为:-1.011*2的-2次方,其中-2为阶码,1.011为尾数,尾数表示时小数点前的1是隐含的不反映出来)
    1 01111101 01100000000000000000000
也可以根据上面的程序编写一段程序来显示浮点数的机内表示方法(只是其位数要根据浮点数的长度来决定)

[ 本帖最后由 cnfarer 于 2010-4-2 22:58 编辑 ]

★★★★★为人民服务★★★★★
2010-04-02 21:48
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:3 
补充说明:上面的32位浮点数表示方法是IEEE 754标准。
将上面程序的main()改为如下可以显示浮点数的表示方法
程序代码:
int main()
{
    struct bs *n;
    int m=10;float f=-0.34375;
    n=(struct bs *)&m;
    prunsigned(n);
    m=-10; 
    prunsigned(n);
    n=(struct bs *)&f;
    prunsigned(n);
}
下面文章中讲得很详细:
http://cto.j.blog.

[ 本帖最后由 cnfarer 于 2010-4-2 23:08 编辑 ]

★★★★★为人民服务★★★★★
2010-04-02 22:07
快速回复:关于数在计算机中的表示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016763 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved