|||
姜老师带你设计CPU之2
1.2. 二进制数
计算机是由电子器件构成的,电子器件的电位,在电路中最容易检测和控制,并且有十分清楚的两种对立状态。如果将低电位用“0”来记,高电位用“1”来记,那么用电子器件排列就可以记录数,这就是计算机为什么使用二进制数的道理。
下面提到的二进制运算对设计运算器很有用。
1.2.1. 二进制数的加减法
用数码0、1按着“逢二进一”的规则记数,得到的就是一个二进制数。二进制数只有数码0、1,顶码是1,所以0、1互为反码。可以理解,如果进制的基数越小,值相同数的记数位数就越长。二进制是记数位数最多的数制,然而由于数码只有两个,故用机器记数非常方便。
2n的二进制表示是10^(n-1)的形式,将一个十进制数化成二进制数,可以拆分成2n的加法。
【例1‑11】 将123化成二进制数。
由于123=64+32+16+8+3,所以
123=1000000(2)+ 100000(2)+ 10000(2)+ 1000(2)+ 11(2)=1111011(2)
因为二进制数只有数码0和1,二进制固定n位数全体的中分点是一个10^(n-1)的数,所以二进制数的对称制表示下正负数判断非常简单,只要看最高位是“0”还是“1”就可以。最高位是“1”一定是负数,否则是正数。
一种流行的错误将最高位的数码说成是“符号”,造成许多误解。
【例1‑12】 对称制下计算10111101(2)+11000100(2)。
同十进制数一样,采用对位加
10111101(2)
+11000100(2)
————————————
10000001(2)
两个负数相加的结果仍然是一个负数,没有发生溢出。结果10000001(2)是一个负数,它是-01111111(2)的对称制表示,所以最后的值是 -127。
为了能够和我们日常的认识一致,手工计算求值的结果一定要化成带符号的十进制数,这样容易理解数值的大小。
【例1‑13】 对称制下计算10101101(2)-00100010(2)。
根据对称制下减法可以变成加法的运算方法,现求减数的对称码。
00100010(2)的反码是11011101(2),因此它的对称码是这样
10101101(2)-00100010(2)= 10101101(2)+ 11011110(2)ó10001011(2)
两负数相加的结果是一个负数,没有溢出。结果的值是-01110101(2),这不是对称制表示,它的值是 - (64+32+16+5)= -117。结果是否正确,我们可以用值运算来验证。
10101101(2)=-83,00100010(2)=34,-83-34=-117。
1.2.2. 超长二进制数
由于同样值的数二进制表示的位数最长,并且计算机使用的就是二进制数,所以就以超长的二进制数来说明如何处理一般位数的数。
以8位的二进制数为例,假如一个数的长度是64位,那么必须用8个8位来分别记录其中的一部分,而且要按着顺序排列。在对称制下,这个64位数的正负,要看最高8位的最高位,此位是0,就表示64位数的值是正数,此位是1,就表示这个64位数是负数,负数的表示要通过“求反加一”并添加负号来求值。
超长数的加法运算,要通过限位数的多次计算完成,方法是由低向高逐次进行。除了第一次加运算之外,每次进行的都是带前次进位数的加法,这样才能保证整体的一致性。在运算中如果某些数位数少,那么按着最高位来添加高位数码即可。例如
10110+101110110101ó111111110110+101110110101
这种事情也可以反过来作,如果从高位过来的二进制数有连续若干个相同的数码,那么在对称制下可以只保留一个。
超长数的加法运算溢出判断同一般的限位数,只要对同号两数值符号的变化进行判断即可。减法的运算是通过加法完成的,因而用加法判断溢出。
如果二进制数带有小数点,那么可以用2n去乘(n是正整数),使之成为一个整数处理,最后再将结果用2n去除化成相应的小数。由于这种乘或除只是认识上的小数点移动,实际操作中并不需要产生动作,因而记住小数点的位置,将带小数点的数作为整数处理没有任何问题。
n位二进制数的表数范围是[-2n-1,2n-1-1],表面值是对称点2n-1,用二进制来表示是10^(n-1)。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-22 20:53
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社