二进制数及其他
使用负数以及小数,鉴于小数在我们课程 的学习阶段用的不是很多,特别是 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 万物归于阴阳
《易传》记录“易有太极,始生两仪。两仪生四象,四象生八卦。这里所说的两仪,就是阴和阳。这 里所说的卦,是宇宙间的现象,是我们肉眼可以看见的现象,宇宙间共有八个基本的大现象,而宇宙间的万 有、万事、万物,皆依这八个现象而变化,这就是八卦法则的起源。而八卦的来源就是阴阳。 我国古代人们 发明的太极八卦用阴阳能够代表世间万物,那么由 0 和 1 组成的二进制数自然能够表示世间所有东西,而不 仅仅是几个数字。也就是说我们现实生活中的图形、图像、声音、文字、色彩等等,都可以用二进制数表 示,当然也可以在计算机中处理和显示出来。其实这个做到了的,否则我们今天也就不会有电脑里的图片、 音乐、视频、文字等等,我们今天的世
二进制数 相关文章:
- 电路换算上的二进制数(12-22)
- 12位串行A/D转换器MAX187的应用(10-06)
- AGC中频放大器设计(下)(10-07)
- 低功耗、3V工作电压、精度0.05% 的A/D变换器(10-09)
- PIC16C5X单片机睡眠状态的键唤醒方法(11-16)
- 用简化方法对高可用性系统中的电源进行数字化管理(10-02)