版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
计算机中数值的表示有两种形式,一是定点数(Fixed-point Number),二是浮点数(Floating-point Number)。
1.定点数的表示形式
定点数指小数点在数中位置固定不变的数。定点数分为定点整数和定点小数,由于小数点位置固定不变,所以存储时小数点不进行存储,按照约定的位置计算数值。原理上讲,小数点的位置可以位于任何位置,但通常将定点数表示成纯小数或纯整数。
假设以机器字长 n 位表示定点数,从右至左,从低位到高位分别为 x1,x2,x3…xn-1,xn,其中 xn 取值 0 和1分别表示正号和负号。如此,对于任意一个定点数 x = xnxn-1…x2x1,在定点机器中可表示为:
如果 x 表示的是纯小数,那么小数点位于 xn 与xn-1 之间,如果 x 表示的是纯整数,那么小数点位于 x1 的右边。
2.定点数的原码、反码与补码
定点数是我们日常生活中使用的数,比如十进制定点正整数 5 3 10 53_{10}5310,二进制表示为 11010 1 2 110101_21101012,我们看不到小数点,但可以认为小数点在数值最后一位的后面,省略不写。二进制 11010 1 2 110101_21101012 即为 5 3 10 53_{10}5310 原码。对于负整数的表示,由最高位符号位为 1 表示负数,假如使用 8 位来表示 − 5 3 10 -53_{10}−5310,那么 -53 的原码为 1011010 1 2 10110101_2101101012。实际上,计算机对定点数的存储采用补码的形式,原码到补码的转换规则如下:
正数:原码=反码=补码 负数: 反码=原码符号位为1不变,其它位取反 补码=反码+1
需要注意的是,定点小数的补码由反码加 1,这个“1”是加在小数部分的最后一位。
以8位为例,53 与-53 的原码、反码与补码具体表示如下:
[53]原=[53]反=[53]补=00110101 [-53]原=10110101 [-53]反=11001010 [-53]补=11001011
负整数的补码与原码不同,为何计算机中负整数的补码计算规则采用上述方