数字 分为 整数 和 浮点数;
先说 整数,整数 是 将 最高位 设置为符号位,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