数字在计算机中是如何存储的

数字 分为 整数 和 浮点数;


先说 整数,整数 是 将 最高位 设置为符号位,1 代表 负数,0代表 正数。

1.1 正整数  在计算机中 是以原码的形式 存储的你也可以说是 补码 或者 反码,因为 正整数的 原码,反码 和补码 是一样的。

1.2 负整数 在计算机中 是以 补码的形式 存储的。 负数的 补码 = 负数的 反码 (即原码 的 非 符号位 取反) + 1


整数的表示范围:

例如 一个8位的 整数,

当其 为 无符号类型时 ,可以 表示 0 ~ 255  ( 即 8个0  ~  8个1)

当其 为 有符号类型时, 00000000~01111111 为  0 ~ 127 ;   10000000 ~ 11111111 为 -128  ~  -1 ;  只要记 都是从最小 到最大 就可以了。

所以 有符号类型 可表示 -128 ~ 127 


为什么 整数 用补码的形式 来表示呢? 因为 这样 物理机器 更容易 实现

例如计算机 实现 加减 运算时,补码 的实现 比较简单。

(x + y) 的补码 =  x 的补码 + y 的补码

(x - y)的补码 =  x的补码 + (-y)的补码


计算机在实现加减乘除四则运算时,其实 内部 只有 加法 运算。


浮点数,是 按照浮点数的 指数 形式 来存储 的。同样 将 最高位设置成 符号位;

 任何 一个 小数 都可以 变成  1.xxx * 2 的n 次方的 形式,大家 看看 这个 公式,我们 只 需要 保存小数 部分xxx 和 指数部分n 就可以了。小数点前面 的1 和 以2 为底 都是 固定的格式。所以不需要存储。


这样 就有了 两种形式  :   1.符号位 + 小数部分xxx + 指数部分   ; 2 .符号位+ 指数部分 + 小数部分xxx  

显然 第一种 离 1.xxx* 2的n次方所的 公式 更加 贴近,并且 更容易 理解。。。 但是计算机中却使用第二种作为存储格式。。。这是为什么呢?


但是 这样 又 出现 一个 问题, 很明显第一位 为 符号位,但是 如何区分 到底有多少位 为 小数 部分,又有多少位 为指数部分呢? 计算机中 一般 都有 固定的 位数,假设 用 8位 表示 浮点数 :1 + 3 位固定的 小数 位 + 4 位固定的指数位;

 

浮点数的 小数 位 数量 和 指数位 数量 是个 此起彼伏的 关系。。

  

对 浮点数 存储 讲的 比较清楚的 网址 :http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html

 

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值