10第一章数制和码制 从这个例子中可以得出一个结论,就是在舍弃进位的条件下,减去某个数可 以用加上它的补码来代替。这个结论同样适用于二进制数的运算。 图1.4.2给出了4位二进制数补码运算的一个例子。由图可见,1011 0111=0100的减法运算,在舍弃进位的条件下,可以用1011+1001=0100的加 法运算代替。因为4位二进制数的进位基数是16(10000),所以1001(9)恰好 是0111(7)对模16的补码。 (15)1111 (14)1110 010(2) 10,01=0100 (13)1101 1 0011(3) (12)1100 0100(4) (11+9-16=4) (11)1011 /0101(5(1011+1001)=回0100 1-7=4 (10)1010 0110(6 舍弃进位 图1.4.24位二进制数补码运算的例子 基于上述原理,对于有效数字(不包括符号位)为位的二进制数W,它的 补码(N)coMn表示方法为 N(当N为正数) (N)COMP (1.4.1) 2-N(当N为负数) 即正数(当符号位为0时)的补码与原码相同,负数(当符号位为1时)的补码等 于2”-N。符号位保持不变。 在一些国外的教材中,也将式(1.4.1)定义的补码称为“2的补码”(2's Complement)。 为了避免在求补码的过程中做减法运算,通常是先求出N的反码(N)wv, 然后在负数的反码上加1而得到补码。二进制N的反码(N)wv是这样定义的 (当N为正数) (Nm-{2-)-N(当N为负数) (1.4.2) 由上式可知,当N为负数时,N+(N)ww=2”-1,而2”-1是n位全为1的 二进制数,所以只要将N中每一位的1改为00改为1,就得到了(N)mv。以 后我们将会看到,将二进制数的每一位求反,在电路上是很容易实现的。国外的 有些教材中又将式(1.4.2)定义的反码称为“1的补码”(1's Complement)
1.4二进制算数运算11 由式(1.4.2)又可得到,当N为负数时,(N)ww+1=2”-N,而由式(1.4.1) 又知,当N为负数时,(N)owe=2“-N,由此得到 (N)cOMp =(N)IN +1 (1.4.3) 即二进制负数的补码等于它的反码加1。 【例1.4.1】写出带符号位二进制数00011010(+26)、10011010(-26)、 00101101(+45)和10101101(-45)的反码和补码。 解:根据式(1.4.2)和式(1.4.3)得到 原码 反码 补码 00011010 00011010 00011010 10011010 11100101 11100110 00101101 00101101 00101101 10101101 11010010 11010011 表1.4.1是带符号位的3位二进制数原码、反码和补码的对照表。其中规 定用1000作为-8的补码,而不用来表示-0。 下面再来讨论两个用补码表示的二进制数相加时,和的符号位如何得到。 为此,我们在例1.4.2中列举出了两数相加时的四种情况 表1.4.1原码、反码、补码对照表 进 数 十进制数 原码(带符号数) 反码 补码 +7 0111 0111 0111 +6 0110 0110 0110 +5 0101 0101 0101 +4 0100 0100 0100 *2 c 01 011 0010 0010 0001 *0 000 ic0 1001 1110 111 1010 1101 1110 1011 1100 1101 g 5 0 0 100 1011 -6 1110 1001 -7 1111 10n n -8 1000 1111 1000
12第一章数制和码制 【例1.4.2】用二进制补码运算求出13+10、13-10、-13+10和-13-10。 解:由于13+10和-13-10的绝对值为23,所以必须用有效数字为5位 的二进制数才能表示,再加上一位符号位,就得到6位的二进制补码。 由式(1.4.1)和式(1.4.3)可知,+13的二进制补码应为001101(最高位为 符号位),-13的二进制补码为110011,+10的二进制补码为001010,-10的 二进制补码为110110。计算结果分别为 +13 001101 +13 001101 +10 001010 -10 110110 +23 010111 +3 (1)000011 -13 110011 -13 110011 +10 001010 -10 110110 -3 111101 -23 (1)101001 从上面的例子中可以看出,若将两个加数的符号位和来自最高有效数字位 的进位相加,得到的结果(舍弃产生的进位)就是和的符号。这个道理仍然可以 用图1.4.2所示的图形加以说明。 需要强调指出,在两个同符号数相加时,它们的绝对值之和不可超过有效数 字位所能表示的最大值,否则会得出错误的计算结果。 复习思考题 1.4.1二进制正、负数的原码、反码和补码三者之间是什么关系? 1.4.2为什么两个二进制数的补码相加时,和的符号位等于两数的符号位与来自最 高有效数字位的进位相加的结果(舍弃产生的进位)? R1.4.3如何求二进制数补码对应的原码? 分分分A今心A心nA心心心A心A分A分 1.5几种常用的编码 一、十进制代码 为了用二进制代码表示十进制数的0~9这十个状态,二进制代码至少应当 有4位。4位二进制代码一共有十六个(0000~1111),取其中哪十个以及如何
1.5几种常用的编码13 与0~9相对应,有许多种方案。表1.5.1中列出了常见的几种十进制代码,它 们的编码规则各不相同。 表1.5.1几种常见的十进制代码 绵码 8421码 十边 种类 余3码 2421码 5211码 余3循环码 (BCD代码 趔数 0000 0011 0000 0000 0010 0001 0100 0001 0001 0110 0010 0101 0010 0100 0111 0011 0110 0011 0101 0101 0100 0111 0100 0111 0100 0101 100 1011 100 1100 0110 1001 1100 1001 1101 0111 1010 1101 1100 1111 8 1000 1011 1110 1101 1110 0 1001 1100 1111 1111 1010 8421 2421 5211 8421码又称BCD(Binary Coded Decimal)码,是十进制代码中最常用的 种。在这种编码方式中,每一位二值代码的1都代表一个固定数值,将每一位的 1代表的十进制数加起来,得到的结果就是它所代表的十进制数码。由于代码 中从左到右每一位的1分别表示8、4、2、1,所以将这种代码称为8421码。每 位的1代表的十进制数称为这一位的权。8421码中每一位的权是固定不变的 它属于恒权代码。 余3码的编码规则与8421码不同,如果把每一个余3码看作4位二进制 数,则它的数值要比它所表示的十进制数码多3,故而将这种代码称为余3码。 如果将两个余3码相加,所得的和将比十进制数和所对应的二进制数多6。 因此,在用余3码做十进制加法运算时,若两数之和为10,正好等于二进制数的 16,于是便从高位自动产生进位信号。 此外,从表1.5.1中还可以看出,0和9、1和8、2和7、3和6、4和5的余3 码互为反码,这对于求取对10的补码是很方便的。 余3码不是恒权代码。如果试图将每个代码视为二进制数,并使它等效的 十进制数与所表示的代码相等,那么代码中每一位的1所代表的十进制数在各 个代码中不能是固定的。 2421码是一种恒权代码,它的0和9、1和8、2和7、3和6、4和5也互为反 码,这个特点和余3码相仿。 5211码是另一种恒权代码。待学了第六章中计数器的分频作用后可以发
14第一章数制和码制 现,如果按8421码接成十进制计数器,则连续输入计数脉冲时,4个触发器输出 脉冲对于计数脉冲的分频比从低位到高位依次为5:2:1:1。可见,5211码每 位的权正好与8421码十进制计数器4个触发器输出脉冲的分频比相对应。这 种对应关系在构成某些数字系统时很有用。 余3循环码是一种变权码,每一位的1在不同代码中并不代表固定的数值。 它的主要特点是相邻的两个代码之间仅有一位的状态不同。 二、格雷码 格雷码(Gray Code)又称循环码。从表1.5.2的4位格雷码编码表中可以 看出格雷码的构成方法,这就是每一位的状态变化都按一定的顺序循环。如果 从0000开始,最右边一位的状态按0110顺序循环变化,右边第二位的状态按 00111100顺序循环变化,右边第三位按0000111111110000顺序循环变化。可 见,自右向左,每一位状态循环中连续的0、1数目增加一倍。由于4位格雷码只 有16个,所以最左边一位的状态只有半个循环,即0000000011111111。按照上 述原则,我们就很容易得到更多位数的格雷码 与普通的二进制代码相比,格雷码的最大优点就在于当它按照表1.5.2的 编码顺序依次变化时,相邻两个代码之间只有一位发生变化。这样在代码转换 的过程中就不会产生过渡“噪声”。而在普通二进制代码的转换过程中,则有时 会产生过渡噪声。例如,第四行的二进制代码0011转换为第五行的0100过程 表1.5.24位格雷码与二进制代码的比较 编码顺序 二进制代码 格雷码 0 0000 001 2 0010 0011 3 011 010 0100 0110 5 0101 011 0110 0101 0111 8 100 68 9 1001 1101 1010 1011 1110 12 100 1010 11 1011 110 15 111