数字电路学习笔记------第一章(数制和码制)
1.几种常用的数制
① 二进制----binary----b (一般用下角标b表示为二进制的含义)
② 八进制----octonary----o(一般用下角标o表示为八进制的含义)
③ 十进制----decimal----d(一般用下角标d表示为十进制的含义)
④ 十六进制----hexadecimal----h(一般用下角标h表示为十六进制的含义)
本章内容主要的要求是学会熟练使用不同进制之间的转换运算及二进制的编码概念
2.不同进制之间的转换
关于这部分内容,由于八进制和十六进制都可由二进制直接改写得到,故掌握的重点应是二进制与十进制之间的换算关系,而二进制与十进制的换算可分为:
① 二进制----->十进制
由二进制换算为十进制很简单,只需用不同位所代表的的基数乘以系数然后全部相加即可换算成功
eg. (1101.01)b = 1×23 + 1×22 + 0×21 + 1×20 +0×2-1 +1×2-2 = (13.25)d
② 十进制----->二进制
十进制换算为二进制又可分为整数部分的换算与小数部分的换算两类:
ⅰ. 整数部分的换算:
对于任意的十进制整数 S 可用二进制数表示成为 (S)d = kn × 2n +kn-1 × 2n-1 + ……k1 × 21 +k0 × 20 (n为正整数)。那么将 S 除以 2 所得到的余数即为 k0,再用上次运算得到的商继续除以 2 得到的余数即为 k1 ,以此类推,即可依次得到 k0 k1 k2 k3 …… kn ,
最后即可得到换算后的二进制数为 knkn-1kn-2……k3k2k1k0 。
eg. 将十进制数 (199)d 换算为二进制数
从上图的计算过程可以得到十进制数 (199) 换算后的二进制数为 11000111
ⅱ. 小数部分的换算:
对于任意的十进制整数 S 可用二进制数表示成为 (S)d = k-1 × 2-1 +k-2 × 2-2 + ……k-n × 2-n (n为正整数)。那么将 S 乘以 2 所得到的积的整数部分即为 k-1,再用上次运算得到的积的小数部分继续乘以 2 得到的积的整数部分即为 k-2 ,以此类推,即可依次得到 k-1 k-2 k-3 …… k-n ,
最后即可得到换算后的二进制数为 k-1k-2k-3……k-n 。
eg. 将(0.8375)d换算为二进制小数
从上图的计算过程可以得到十进制数 (199) 换算后的二进制数为 0.1101
③ 八进制、十六进制换算为二进制只需分别用等值的三位、四位二进制代替即可,反之亦然。
④ 八进制、十六进制与十进制的换算可通过换算为二进制后再转换为十进制,亦可通过二进制与十进制同样的转换原理操作,在此不赘述。
二进制的四则运算
对于任何一类数的学习,都离不开加减乘除四则运算,如在学习矩阵运算、复数运算等等过程当中四则运算都是最基本的,且必须掌握的简单运算。
① 加法运算:大于 1 的往左进位
eg. 求二进制数 1001 和 0101 的和
② 减法运算:不够的向左借位
eg. 求二进制数 1001 和 0101 的差
③ 乘法运算:与十进制的乘法类似,同样可从加法运算的基础上得到
eg. 求二进制数 1001 和 0101 的积
④ 除法运算:与十进制的除法类似,同样可从减法运算的基础上得到,需要强调的是,除法运算得到的商是二进制数
eg. 求二进制数 1001 和 0101 的商
二进制的反码与补码
前面我们对于二进制与十进制的换算、四则运算进行了详细的阐述,但是仍然有个很关键的问题是:前面所定义的二进制数都只能用来表示正数,那么负数如何用二进制表示呢?
① 二进制的符号数
二进制的负数可用符号数来表示,即首先对数据类型进行定义,如果该数被定义为无符号数,则只能表示正数;如果该数被定义为符号数,则需判断符号位,若符号位的数为 0 ,则该数为正数,若符号位的数为 1 ,则该数为负数。(二进制数的首位为符号位)
eg. 求符号数 10010 和无符号数 10010 对应的十进制数分别为多少?
符号数 10010 ,首位为符号位 = ** 1** ,因此该数为负数,数值为 -2
无符号数 10010 ,直接计算可得数值为 18 ,它的数值可等同于符号数 010010
② 二进制的反码与补码
反码与补码的概念对于理解编程语言中的数据类型有一定帮助,同时也是数字电路中很基础的一个概念。
对于正数而言,反码、补码都等于本身;对于负数而言,反码就是二进制数各个位置都取反,补码就是在反码的基础上加 1(符号位不变)。
显然,若需要求二进制数的反码与补码,首先要确定该数是正数还是负数,这一点取决于符号位。
eg. 求有符号数 11011 和 01101 的反码与补码
11011 反码各个位置取反为 10100 补码为 10101
01101 反码为本身= 01101 补码也为本身= 01101
补码的概念是为了方便做减法运算才定义出来的,因为正常的减法运算需要判断被减数与减数的绝对值大小,这样特别麻烦,而用补码则非常简单便捷。
反码则是为了方便补码的计算提出的,所以一般都是先求反码再求补码
补码实际上是舍去了进位,原理类似于 时钟,如该时刻为 3 点方向想要把时针拨到 8 点,可以顺时针拨动 5格,记为 +5,也可逆时针拨动 7格 ,记为 -7 ,因此 5 和 -7对于这个 12 格的时钟系统而言互为补码。