数字电子技术基础——数制与码制
一、二进制及其转换
二进制,是在数学和数字电路中以2为基数的记数系统,是以2为基数代表系统的二进位制。这一系统中,通常用两个不同的符号0和1来表示 。
1.整数的 X进制-二进制 转换:
十转二:

X转十:

-
难点1:带有小数的二进制数转十进制:
-
难点2:带有小数的十进制数转二进制:
分别计算整数和小数部分:
-
整数部分按照上述方法计算
-
小数部分:将原数字乘2,取其整数部分;小数部分乘2,取其整数部分;如此循环直到小数部分不存在为止。最后将每一轮所取得的整数部分顺序排列

-
2. 十六、八进制与二进制的转化
二进制四位一组对应十六进制一位,二进制三位一组对应八进制一位,不足补齐前导0
二、二进制的朴素的乘除运算
二进制乘法:正常乘就行

二进制除法:“减”-“右移”-“减”-“右移”-“减”-“右移”-“减”-“右移”-“减”循环

三、利用补码实现二进制数加减法
原码:带符号的二进制数
反码:原码除了符号位之外取反得到,记为
补码:补码=模数+真值(超出模数则舍弃一个模数)。
用补码相加代替减法运算使得避开比较环节,记为
例子:5是-7对模12的原码
- 难点4:原码和补码间的转换方式
原码转换为补码(将实际数值转换为补码以便在计算机中表示):
- 如果原码表示的是一个正数,补码=原码。
- 如果原码表示的是一个负数,补码=原码除符号位取反+1
补码转换为原码(从补码得到实际数值):
- 如果补码的最高位(符号位)是0,那么它表示的是一个正数,原码就是补码本身。
- 如果补码的最高位是1,那么它表示的是一个负数,原码=补码除符号位取反+1
-
难点5:进位溢出到符号位的处理方式:添加位数
例:用补码方式计算-13+10
13和10都可以用4位二进制数表示,加上一位符号位,考虑结果超过16可能性(后面算-13-10的时候会有,用5位试试看就知道会出问题),此处采用六位二进制数字表示
其中
-13的原码为1-01101,10的原码为0-01010
由此可以得到二者的补码:
其中 -13的补码为1-10011,10的原码为0-01010(注意10是正数,补码等于本身)
补码相加:(在相加过程中符号位参与运算,出现符号进位的情况后面再说)
注意此处得到的是-3的补码,要翻译回原码,由于第一项为符号位,为1,则对后面的取反+1,得到1-00011,即为-3的原码。
注意!!!:二进制补码相加的时候,和的符号位等于两数符号位与来自最高位的进位相加的结果,而舍弃产生的进位。
以下为这句话的解释:
在二进制相加中,如果两个位相加的结果超过了当前位的表示范围,就会产生进位。对于补码相加,进位被舍弃,不参与最终结果的计算。这是因为补码的表示范围是固定的,超过该范围的进位部分将被忽略,以保持结果的正确性。
所以如果已经能够确定结果的范围,算出来的就一定是正确的了。只是其内部在取模,回环往复达到结果而已。
拓展:正溢出,负溢出与变形补码
变形补码就是多一个符号位,原来的0变00,11变11。
对加法而言,正负相加显然是不会溢出的。
那么对于正正相加,符号位为00、00,发生溢出时是上溢,应该会有进位到符号位上,会变成01。
而对于负负相加,符号位为11、11,此时两个数为, , 因为x和y都是负数,两个相加结果会小于,不溢出的时候高两位表示的应该是,所以是11,而溢出的时候,,高两位表示的应该是,对应10。
所以"00"、 “01”分别表示正数、正溢出(上溢),“11”、“10”表示负数、负溢出(下溢)。
四、码制
(一)等长编码
- 8421码
-
难点6:8421码(BCD码)
用四位二进制数对位表示十进制数,没有权值,是等长编码
例如:38
3: 0011
8: 1000
所以38:
-
格雷码
最大特点:相邻代码只有一位改变状态。
应用:路由器
(二)变长编码
-
哈夫曼编码
基于各个字母出现的频率进行不同长度的编码,出现频率小,编码长,表示不常用。适用于字典。