编码方法就是把真值转换为机器数的方法。
二进制数编码
设真值 是一个包括1位符号位的n+1位整数真值(注意: 是符号位); 是一个包括1位符号位的n+1位小数真值(注意: 是符号位)。
显然,x和y的数值部分均为n位。据此,给出二进制数原码、反码、补码、移码的定义。
原码
整数x和小数y的原码分别定义为:
反码
整数x和小数y的反码分别定义为:
补码
整数x和小数y的补码分别定义为:
其中,当x补与x的位数相同时,使用第二个式子;当x补比x少1位时,使用第三个式子。
移码
整数移码定义为:
其中,当x移与x的位数相同时,使用第一个式子;当x移比x少1位时,使用第二个式子。
十进制编码
设真值 是一个包括1位符号位的n+1位整数真值(注意: 是符号位); 是一个包括1位符号位的n+1位小数真值(注意: 是符号位)。即,x和y的数值部分均为n位。据此,给出十进制数原码、反码、补码、移码的定义。
十进制原码
整数x和小数y的十进制原码分别定义为:
十进制反码
整数x和小数y的十进制反码分别定义为:
十进制补码
整数x和小数y的十进制补码分别定义为:
其中,当x补与x的位数相同时,使用第二个式子;当x补比x少1位时,使用第三个式子。
补充说明
①当真值为正数时,原码、反码和补码均为“符号-数值”码,只要将真值的“+”号用“0”取代即可。
②当真值为负数时,原码、反码和补码的数符和数值均由定义直接求出,但在求定义域端点之值时,有时要对结果加以简单处理。其符号是二进制为“1”,十进制为“9”。
示例
已知二进制真值x=-0000,求其补码。
解:x共5位:符号位为1位,数值位n为4,则:
x补=
补码基于“同余”概念,此处模为应丢掉,即最高位[1]应该丢掉,故其结果为00000。该数连同符号位一起共5位数,这就是上述提到的对定义域“端点”之值进行处理的问题。结果说明,在补码系统中,0有唯一的表示,即+0=-0=0。