原码是一种简单、直观的机器数表示方式,其表示形式与真值的形式最为接近。上一篇中例1-2中展示的定点数采用的既是原码表示。原码规定机器数的最高位为符号位,0表示正、1表示负,数值部分在符号位后面,并以绝对值的形式给出。
设x为n位二进制数,下面给出纯小数、纯整数的原码定义:
ü x为纯小数,0<=x<1时,它的原码等于真值x;-1<x<=0时,它的原码等于1+|x|。
ü x为纯整数,0<=x<2^n时,它的原码等于真值x;-2^n<x<=0时,它的原码等于2^n+|x|。
例2-1:已知x,求x的原码。
+0.1010110、-0.1010110、+1010110、-1010110
结果:0.1010110、1.1010110、01010110、11010110
真值0的原码表示:原码中真值0的表示有两种,即+0和-0。
纯小数的原码,+0为0.0000000、-0为1.000000;纯整数的原码,+0为00000000、-0为10000000。
原码的缺陷:0的表现形式不唯一;原码表示不便于实现加减运算。原码的加减运算过程有些类似我们自己进行加减运算的过程。当两数相加时,首先要判断两数的符号,若同号则做加法,若异号则做减法。当两数相减的时候,不禁要判断两数的符号,使得同号相减、异号相加;还要判断两数绝对值的大小,用绝对值大的数减去绝对值小的数,取绝对值大的数的符号为结果的符号。可见过程复杂不适合实现加减运算。但是原码的乘除运算可以通过数位的左移和右移来实现,还是很方便的。
原码的缺陷造成实现原码加减法的硬件比较复杂。为了简化运算,让符号位也作为数值的一部分参加运算,并使所有的加减运算均以加法运算来代替,人们提出了补码表示。下一节待续。