数制,就是数的计数方法,也就是数的进位法。在数字电子技术中,数制是必须掌握的基础知识。
数的计数方法,其基本内容有两个:如何表示一个数以及如何表示数的进位。公元 400年,印度数学家最早提出了十进制计数系统,当然,这种计数系统与人的手指有关。这种计数系统(就是数制)的特点是逢 10 进 1,由 10 个不同的数码表示数(也就是 0~9 共 10 个阿拉伯数字),我们把这个计数系统称为十进制。十进制计数内容已经包含了数制的三要素:基数,位权,复位和进位。下面我们就以十进制为例来讲解数制的三要素。
表 1.1-1 是一个十进制表示的数 6505 是一个四位数。
表1.1-1 数制三要素
其中,6、5、0 是它的数码,也叫数符。我们知道:十进制数有 10 个数符:0~9。我们把这 10 个数符称为十进制数的基数。基数表示数制所包含数码的个数,同时也包含了数制的进位,即逢 10 进 1。 N 进制数必须有 N 个数码,逢 N 进 1。每个数位上的数符叫位码。
以b 0 位,b 1 位,b 2 位,b 3 位表示该四位数各数码所在的位(即日常所说的个位,十位,百位,千位)。
数制中数最左边的位称为最高有效位MSD(Most Significal Digit),最右边的有效位称为最低有效位LSD(Least Significal Digit)。在二进制中,常常把LSD位称为低位,而把MSD位叫高位。
规定最右位(个位)为b 0 位,然后往左依次为b 1 ,b 2 ……容易发现b 2 位的位码和b 0 位的位码虽然都是 5,但它们表示的数值是不一样的。b 2 位的 5 表示 500,b 0 位的 5 只表示 5。为什么呢?这是因为不同位的位权是不一样的。位权又叫权值,是数制的三要素之一,表示数码所在位的权值。位权一般是基数的正整数幂,从 0 开始,按位递增。b 0 位位权为 10 0 ,b 1 位位权为 10 1 ,以此类推, N 进制的n位的位权为 N n 。
位权确定后,该位的位值就等于该位的数码乘以该位的位权。如表 1.1-1,b 0 位的“5”其位值为 1×5=5,而b 2 的 5,其位值为 5×10 2 =500。所以同样的数码,其位不同,位权不同,位值也不同。
在计数时,当数中某一位(如b 0 位)到达最大数码值后,必须产生复位和进位的运转。当b 0 数到 9(最大数码)后b 0 位会变为 0,并向b 1 位进 1。复位和进位是数制必需的计数处理。
我们把基数,位权,进位和复位称为数制三要素。一般情况下,数制的数值由各位数码乘以位权然后相加得到,如 6505 = 6×10 3 +5×10 2 +0×10 1 +5×10 0 。
上面虽然是以十进制来介绍数制的知识的,但是数制的三要素对所有的进制都是适用的。一个 N 进制的 n 位数,其基数为 N ,有 N 个不同的数码,逢 N 进 1,其位权由LSD位(b 0 )到MSD位(b N-1 )分别为 N 0 到 N n-1 。当某位计数到最大数码时,该位复位为最小数码,并向上一位进 1,其数值为:
数值= b n-1 × N n-1 +b n-2 × N n-2 +…+b 1 × N 1 +b 0 × N 0 。
二进制数基数为 2,有 2 个不同的数码,逢 2 进 1,其数码为 0、1。
既然十进制已经用了 2000 多年,而且也很方便,为什么还要提出二进制呢?这实际是数字电子技术发展的必然。因为在脉冲和数字电路中,所处理的信号只有两种状态:高电位和低电位,这两种状态刚好可以用 0 和 1 来表示。当我们把二进制引入数字电路后,数字电路就可以对数进行运算了,也可以对各种信息进行处理了。可以说,计算机今天能够发挥如此大的作用与二进制数的应用是分不开的。我们要学习数字电子控制技术就必须要学习二进制。
十进制数基数为 10,有 10 个不同的数码,逢 10 进 1,其数码为 0、1、2、3、4、5、6、7、8、9。
二进制数的优点是只用两个数码,和计算机信号状态相吻合,直接被计算机所利用。它的缺点是表示同样一个数,它需要用到更多的位数。太多的二进制数数位使得阅读和书写都变得非常不方便,例如,11000110 根本看不出是多少,如果是 97,马上就有了数大小的概念。因此,在数字电子技术中引入十进制数就是为了阅读和书写的方便。
基数为 16,有 16 个不同的数码,逢 16 进 1,其数码为 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
引进十六进制数除了表示数的位数更少,更简约之外,还因为它与二进制的转换极其简单方便,这一点会在数制的转换内讲到。
十六进制数,对了解数字控制器的数据存储器的存储内容最为方便。因为目前各种数据存储器都是按照二进制位的 8 位,16 位,32 位制造的,因此,它们所处理的数据就是 8 位,16 位,32 位作为一个整体来进行的(并行运算)。要描述它们所处理的数据内容,用二进制表示,不但阅读和书写十分不便,而且进行人机对话或人与人之间交流都非常困难。用十进制描述,虽然对数值处理十分方便,但对非数值处理(字母、代码等处理)同样不方便。而且它不能马上了解二进制数的各个位的状态。十六进制则不然,它和二进制有着极其简单的对应关系,可以很方便地由十六进制写出二进制数,很快判断出各个二进制位的状态。同时,它转换成十进制数也非常容易。因此,十六进制数在工控技术中得到广泛的应用。
除了上面介绍的二进制、十进制、十六进制外,八进制在约 40 年前比较流行,因为当时很多微型计算机的接口是按八进制设计的(三位为一组),然而今天已经用得不多了。目前,仅在PLC上的输入输出(I/O)接口的编址还在使用八进制。
上面介绍了数制的整数部分知识,那么小数是如何表示的呢?仍举十进制为例。
表 1.1-2 表示了十进制的小数 0.3203。同样,小数部也有其位、位权、位值,也有进位与复位。
位:小数的位以B表示(以示与整数的位b区别)。从小数点后面算起,依次为B 1 、B 2 、B 3 位。注意,没有B 0 位。
位权:小数的位权依次为 N -1 、 N -2 、 N -3 等。
位值:和整数部分一样为位码×位权。
表1.1-2 数制中小数
小数所表示的数值由所有位的位值相加,如表中:
0.3203=3×10 -1 +2×10 -2 +0×10 -3 +3×10 -4 。
不同的数制,其位码不同、位权不同、位值也不同,但原理是一样的。
本来, N 进制数制的基数 n 个数码是人为随意规定的,但是目前国际上关于二进制,八进制,十进制,十六进制的基数都已做了明确的规定,如表 1.1-3 所示。
表 1.1-3 二进制,八进制,十进制,十六进制数表示
我们发现这四个进制的基数有部分相同的,这就出现了数制如何表示的问题,例如,1101 是二进制、八进制、十进制还是十六进制数呢?因此,很有必要对常用数制的表示做出一些规定。目前业界对这种表示没有统一的规定,完全由资料编写者自己决定,有的用括号加下标表示,有的加前后缀符号来表示,显得很混乱。表 1.1-4 中列出了一些常用的表示方法。
表 1.1-4 数制常用表示方法
为了明确区分,本书中采用三菱PLC的数制表示方法,在数的前面加上前缀以示区分。例如B1101 是二进制数,K1101 是十进制数,而H1101 是十六进制数。
在PLC中,常常用二进制和十六进制来表示代码,而不是数制,这是为了与数据相区别。就在数的后面加上后缀表示,例如“H30”表示一个数,而 30H表示“0”的ASCII码等。下面涉及数制及数制间的转换均采用加前缀B、K、H表示,不再另行说明。
【试试,你行的】
(1)数制的三要素是什么?
(2)数字技术中处理的是几进制数?为什么?
(3)为什么要在数字技术中引入十进制和十六进制数?
(4)八进制数的基数是几?有几个不同的数码?逢几进 1?如果其数码为 0~7,那么八进制数 1234 表示十进制数多少?八进制小数 0.321 表示十进制小数多少?
(5)三菱PLC是如何表示二进制、十进制、十六进制数的?H5A2、B1010110、K5420各是什么进制数?