微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 电路换算上的二进制数

电路换算上的二进制数

时间:12-22 来源:互联网 点击:

最 多的是十进制数,所以十进制数后的字母 D 可以省略,直接写 145,就如我们在中国买东西,标价是 200 的话默认单位就是人民币了,但二进制数和十六进制数后的字母不能省略。

2.4  负号的解决之道

以上在讨论数值的时候都只考虑了正数的情况,其实我们还使用负数以及小数,鉴于小数在我们课程 的学习阶段用的不是很多,特别是 9051 单片机,对于小数的运算非常不擅长,所以也就很少用到了,自然 不会讲太多。接下来我们就仅讨论负数的问题。

在数学运算中,表示一个数的正负,我们在数据的前面加上一个 正号或者负号(+/-),但是在计算 机中,对于这个正负号的表示就有点问题了,计算机中只能使用 0 和 1,没法使用+ -,那么我们如何表示 一个数值的正负呢?方法是用 0 和 1 来表示正负号。正常的情况下,我们用 0 来表示正号,1 来表示负号。 这样,我们对于一个数值就有两部分构成,符号位和数值位,符号位用 0 和 1 来表示正负,数值位表示大 小。计算机中的数值有很多,为了防止符号位和数值位不对应,我们一般把符号位和数值位作为一个整体来 处理。前面我们讲过,在计算机中经常用到的单位是 Byte,有 8bit,我们就把最高位作为符号位,其他的 7 位作为数值位。如图 6。

D7   D6     D5    D4     D3    D2     D1    D0

符号位    数值位

0   正数

1  负数

图 6  符号位和数值位

这样我们就可以用二进制数来表示负数了。如

+10=0000 1010B

-10=1000 1010B

这样我们就不怕负数了。我们来计算一下+10 + (-10)的结果。在计算机中,+10 和-10 我们已经转化 为二进制数了,这里直接列竖式相加就可以了

0000 1010

+  1000 1010

————————————

1001 0100

为什么结果不是 0?难道+10 +(-10)不等于 0?答案肯定是 0 的,绝对是二进制数运算出错,可是错误

在哪里呢?大家思考一下数学中对于两个数据相加是如何做的?首先是比较两个数的符号,如果符号相同, 那么两个数值相加,符号不变,而如果两个数值符号不同,则比较一下哪个数值大,用数值较大的减去数值 较小的,符号用数值较大的符号。也就是说,我们数学上计算的时候是分情况的,而在上面的式子中,我们 把符号也参与运算了,并没有比较两个数的数值大小。

问题出现了,那么就要解决它。计算机的先驱者们发现,若按照我们数学上的处理方法,则实现的电 路很复杂,便采取了另外一种方法,符号可以参与运算,而且结果也可以是正确的,这便是补码表示。讲补 码的时候涉及到几个概念:原码,反码,补码。

原码 最高位表示符号,其他位表示数值,则这种表示方法就是原码。如

[+10]原=0000 1010B

[ -10]原=1000 1010B

反码 对于正数,反码和原码一样。对于负数,反码就是把原码符号不变,数值为取反,如

[+10]反=0000 1010B

[ -10]反=1111 0101B

补码

对于正数,补码和原码一样,对于负数,补码就是把反码加 1,如

[+10]补=0000 1010B

[ -10]补=1111 0110B

总结一下,对于正数,[X]补=[X]原

负数 ,[X]补=[X]反 +1

补码费劲的得到了有水木好处呢?我们用补码的话就可以直接带符号参与运算了。还是上面的例子。

[+10]补=0000 1010B

+    [ -10]补=1111 0110B

———————————————————

1 0000 0000B

得到的结果是 0,可能有人说了,不是最前面有个 1 的吗,怎么会是 0 呢。这里我们不要忘记了,在计算机 中,所有的数据位数是固定的,我们这里举例为 8bit 的例子,那么得到结果后我们也只能保存八位,你看看 上面的结果,一共有 8 个 0,计算机只能保存这 8 个 0,最前面的 1 是不算在结果里的。所以,得到的结果 就是正确的。

补码的运算中还有一个溢出的问题,大家可以试着用补码来计算一下 -98+(-50),你会发现得到 了一个最高位是 0 的八位数,也就是说,变成了一个正数。这就是超出了数据范围,产生了溢出。关于溢 出,因为不是重点,大家可以自己查书找到答案。

3       万物归于阴阳

《易传》记录"易有太极,始生两仪。两仪生四象,四象生八卦。"这里所说的两仪,就是阴和阳。这 里所说的卦,是宇

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top