1 数字电路绪论
- 模拟信号:是时间和幅度均连续的信号
- 数字信号:是用时间和数值上均离散的物理量来表示的信号
能够处理数字信号,并完成数字计算的电路系统称为数字电路或数字系统,它比模拟电路传递数据和运算更有效、可靠
1.1 数字电路的特点
- 二进制信号:0和1
- 不仅能进行数值运算,还能进行逻辑判断和逻辑计算
- 可靠性好、精度高、抗干扰能力强
2 信息
不同的学科对信息的解读不一样,有一种说法是:信息是知识的传递,描述的某种状态或者某个事实
信息要解决的是不确定性,接收到信息后应该会消除掉某种不确定性
3 编码
解决了信息是什么,那我们该如何表达信息,就要用到信息的编码
例:扔一枚硬币,一次扔硬币行为的正反面谁朝上的结果就是一种信息,对于它,我们就可以简单的通过1位的二进制数来表示,如0表示反面朝上,1表示正面朝上
编码就是对信息的描述和代表的一种方式,在学习或者设计一种编码的时候,我们要注意:
- 编码的机制
- 编码的效率(即一段编码能够表示多大的信息)
- 编码的可靠性
- 编码的安全性
- 编码的唯一性:对于一个信息的一类编码形式,它的表示方式是唯一的
例:对于大连理工大学的某个学生的学号20231111111
如果看到段数字的人是大连理工大学的学生,那么可能会认为这是一位同学
如果是别人看到了这段数字,可能会认为这是202亿的一个数字
这就引出了两个规则:
- 数制:表示数量的规则
- 码制:表示事物的规则
3.1 数制
3.1.1 基数
一个数制所包含的数字符号的个数称为该数制的基数,比如二进制,十进制,八进制,十六进制等
3.1.2 常用进制
3.1.2.1 十进制
基数是10,有十个数码即十个个位阿拉伯数字
逢十进一,一个十进制数可以按权展开为多项式,叫做权展开式个数字所处的位置就是权
权展开式可以推广到所有进制
3.1.2.2 二进制
基数是2,有两个数码,0、1
逢二进一,其权展开式例如$(11010.11)_{2}$可以展开为$$1 \times 2^4 + 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 0 \times 2^0 + 1 \times 2^{-1} + 1 \times 2^{-2}$$
3.1.2.3 八进制
基数是8,有八个数码是阿拉伯数字0 $\to$ 7
逢八进一,权展开式与上面两个同理
3.1.2.4 十六进制
基数是16,十六个数码,十个阿拉伯数字以及A,B,C,D,E,F
逢十六进一,权展开式同理
根据上面的这些进制,我们可以推导出任意进制
3.1.3 数制间转换
3.1.3.1 $\gamma$进制转换为十进制
各种进制按权展开就完成了向十进制的转换
3.1.3.2 十进制转换为$\gamma$进制
-
整数部分
在整数部分,我们使用短除法进行进制转换,对十进制数一直除以$\gamma$,得余数,反复对商除以$\gamma$,直到除不尽为止,余出最后的余数,最后把所有余数逆序排列,就是$\gamma$进制的表示方法,其中最后得出的余数位数最高(权重最大),称为MSB(高位),最先得出的余数位数最低(权重最小),称为LSB(低位)
比如以下就是把十进制的39转换为二进制的过程
$$
\begin{array}{cl}
39 \div 2 = 19 & 1 \quad (\text{余数}) \\
19 \div 2 = 9 & 1 \\
9 \div 2 = 4 & 1 \\
4 \div 2 = 2 & 0 \\
2 \div 2 = 1 & 0 \\
1 \div 2 = 0 & 1 \quad \\
\end{array}
$$
转换结果就为$100111$
-
小数部分
在小数部分,我们采用乘法取整法
重复以下操作直到 $F = 0$ 或达到所需精度:
- 乘基取整:$F \times \gamma =$ 整数部分 $a$ + 新小数 $F’$
- 记录整数:记下 $a$,保留新小数 $F = F’$
- 顺序排列:结果的小数部分按运算顺序排列(即先记录的为高位,后记录的为低位)。
- 循环小数:若新小数重复出现,则后续结果循环
3.2 二进制的补码
我们可以简单的使用二进制表示十进制数,但我们现在无法表示正负,只能表示数的大小,我们需要思考如何用二进制表示出十进制的正负号
朴素的想:我们可以二进制数的最高位增加一位,专门用于表示数的正负,但是这样就会出现很多问题:比如$(+5+(-5))_{10}=(00101+10101)_{2}\neq 0$,并且对于$0$,出现了$+0,-0$,显然这种方式是有其问题的,我们把这种表示方式称为原码,原码不能直接用于计算,但它最适合人类阅读
所以,在二进制中需要运算正负数时,我们采用补码的方式,这是一种混合编码,对于数值大小,我们采用数制二进制,对于数字的正负,采用码制来表示正负
在理解反码的编码原理之前,我们可以先进入一下死记硬背环节:
- 反码:正数的反码是其本身,负数的反码是符号位不变,其余位全部取反
- 补码:正数的补码是其本身,负数的补码是符号位不变,其余位全部取反后+1,即$反码+1$
3.2.1 补码的编码规则
补码的主要思想就是对于二进制数的权做了修改,在我们上面朴素的想法的基础上,又赋予其权值,使得最高位既表达符号,又有权重可以表达大小,对于一个二进制数补码,我们定义它各位的权重为
$$
-2^{N-1}(符号位),2^{N-2},…,2^3,2^2,2^1,2^0
$$
我们思考一个四位的二进制补码,现在它能表达的最大的正数就是$0111=(7)_{10}$,能表达的最小的负数是$1000=(-7)_{10}$,也就是说一个四位的二进制补码可以表示$-8\to7$一共16个数,这与不使用补码的无符号四位二进制数所能够表达的数字个数一致,只是用了一半去表达负数
我们可以再试试上面相加不为0的问题,$1111+0001=10000(溢出一位)$,即$-1+1=0$,这成功的解决了上面的问题,此时0的表现形式为其原码形式$10000$
例:一个二进制补码$11010110$,它对应的十进制数是多少,$1101.0110$呢
Note
$-2^7+2^6+2^4+2^2+2^1=-128+64+16+4+2=-42$
$-2^3+2^2+2^0+2^{-2}+2^{-3}=-8+4+1+0.25+0.125=-2.625$
3.3 码制
用不同数码表示不同事物时遵循的规则,比如:学号、身份证号、车牌号
我们常用的代码比如ascll码
- 等长编码:一个码制中所有的编码都是等长的
- 变长编码:待编码的事物的出现频率不一样,比如在电报电文中,某些字母或符号出现频率高,某些频率低,为了让发报的效率尽可能高,即电文的长度尽可能短,我们应该把出现频率高的字母或符号的编码设计的尽量短(这也是一种贪心的思想)(这里可以Callback到离散数学中的哈夫曼编码,那就是一种变长编码的编码方式)
3.3.1 BCD码
BCD(binary coded decimal):二进制编码的十进制,是一种有权码
比如8421BCD码:用四位二进制编码来表示十进制的十个数字,进而表达所有数
$$
\begin{array}{ll}
0 \to &0000 \\
1 \to &0001 \\
2 \to &0010 \\
3 \to &0011 \\
\dots \\
9 \to &1001
\end{array}
$$
3.3.2 格雷码
格雷码(Gray Code) 是一种无权码,常用于通讯以及电路中信息的传递,因为电路中,四位数的变化不可能同时发生,所以格雷码被设计相邻数字之间必有且仅有一个位不同,并且它还是一种循环码,这意味着最大数和最小数之间也只有一位不同
$$
\begin{array}{ll}
0 \to &0000 \\
1 \to &0001 \\
2 \to &0011 \\
3 \to &0010 \\
4 \to &0110 \\
\dots \\
8 \to &1100 \\
9 \to &1101
\end{array}
$$