(如果对某一知识点具体例子感兴趣的话烦请留言)
第一章:数制和码制
一、前置问题
1.为什么要使用二进制
二进制数由于仅包含1和0两个数值,可以简便地通过开关电路的高电平和低电平来表示,这使得表示1位二进制数的单元电路结构非常简单,同时对电源电压的稳定度要求相对较低。这种电路只需能正确区分高、低电平两个状态,允许电平在一定范围内波动,即具有一定的“噪声容限”。相比之下,采用十进制表示则需要每个单元电路能输出十个不同电压等级的信号以代表0至9的数值,这样的电路设计复杂且难以实现。
2.为什么使用补码运算
当两个正数相加时,可直接使用加法器电路完成运算。然而,对于两个符号不同的数相加(即相减),情况则复杂得多。此时,需先通过比较电路确定两数绝对值的大小,以决定哪个数为被减数、哪个数为减数,再进行减法运算。但值得注意的是,二进制数的减法运算可以通过其补码相加来实现,这一方法避免了直接设计复杂的减法运算电路。尽管需要先求取补码,但补码产生电路相对简单,且求补码与相加的操作可以合并进行,从而简化了运算过程并提高了运算速度。
二、常见习题类型
1.不同进制之间的转换
2进制、8进制、10进制、16进制之间的转换可以通过以下方法进行:
2进制与其他进制的转换
-
2进制转10进制
-
方法一:逐位乘方累加法。将二进制数的每一位与对应的2的幂次方相乘,然后将所有乘积相加得到十进制数。例如,二进制数1101转换为十进制数为1×22(次方)+0×20(次方)=8+4+0+1=13。
-
方法二:位权法。将二进制数的每一位看作一个位权,权值依次为2^0、2^1、2^2等,然后将所有位与对应权值的乘积相加得到十进制数。
-
-
2进制转8进制
-
方法一:分组转换法。从二进制数的最低位开始,每三位数字进行分组(不足三位在最高位补零),然后将每个分组的二进制数转换为对应的八进制数。
-
方法二:先转10进制再转8进制。先将二进制数转换为十进制数,再将十进制数转换为八进制数。这种方法较为繁琐,不常用。
-
-
2进制转16进制
-
方法一:除2取余法(改进版)。将二进制数从右向左每四位分为一组(不足四位在左侧补零),然后计算每组对应的十进制数,再将这些十进制数转换为对应的十六进制字符。
-
方法二:递归查找法。从最低位开始逐位查找对应的十六进制字符,并根据前一位的值决定当前位应该采用的进位规则。这种方法通常用于处理大整数,且需要借助辅助函数进行计算。
-
方法三:先转10进制再转16进制。先将二进制数转换为十进制数,再将十进制数转换为十六进制数。这种方法同样较为繁琐,不常用。
-
8进制与其他进制的转换
-
8进制转2进制
-
方法一:逐位拆解法。将八进制数逐位拆解为二进制数,再将各个二进制数拼接起来得到最终结果。例如,八进制数732可以拆解为011、110、000(注意不足三位补零),然后拼接为111011000(2)。
-
方法二:快速转换法。利用八进制与二进制之间的进制关系进行乘方和加减运算得到转换结果。例如,八进制数732可以转换为7×8^2+3×8^1+2×8^0=448+24+2=474(10),然后再将474转换为二进制数111011000(2)。但这种方法实际上绕过了直接转换为二进制的过程,更直接的方法是逐位拆解法。
-
-
8进制转10进制
-
方法:逐位乘方累加法。将八进制数的每一位与对应的8的幂次方相乘,然后将所有乘积相加得到十进制数。例如,八进制数73转换为十进制数为7×8^1+3=56+3=59(10)。
-
-
8进制转16进制
-
方法一:先转2进制再转16进制。先将八进制数转换为二进制数,再将二进制数转换为十六进制数。
-
方法二:先转10进制再转16进制。先将八进制数转换为十进制数,再将十进制数转换为十六进制数。这种方法同样较为繁琐且容易出错,不常用。
-
10进制与其他进制的转换
-
10进制转2进制
-
方法:除2取余法。将十进制数不断除以2并取余数直到商为0为止,然后将所有余数从低位到高位依次排列得到二进制数。
-
-
10进制转8进制
-
方法:除8取余法。与除2取余法类似,将十进制数不断除以8并取余数直到商为0为止,然后将所有余数从低位到高位依次排列得到八进制数。
-
-
10进制转16进制
-
方法:除16取余法。与除2取余法和除8取余法类似,将十进制数不断除以16并取余数直到商为0为止(注意余数范围为0~15,其中10~15用A~F表示),然后将所有余数从低位到高位依次排列得到十六进制数。
-
16进制与其他进制的转换
-
16进制转2进制
-
方法:每一位十六进制数直接转换为四位二进制数。由于十六进制数的每一位可以表示0~F(即0~15),因此可以直接对应到四位二进制数(0000~1111)。例如,十六进制数D1可以转换为二进制数11010001。
-
-
16进制转8进制
-
方法一:先转2进制再转8进制。先将十六进制数转换为二进制数,再将二进制数转换为八进制数。这种方法较为繁琐但准确。
-
方法二:直接转换法(需要一定技巧)。由于十六进制数的每一位可以表示4位二进制数(即一个十六进制字节对应一个二进制半字节),因此可以通过一些技巧直接转换为八进制数。但这种方法需要一定的经验和技巧,不常用。
-
-
16进制转10进制
-
方法:逐位乘方累加法。与二进制和八进制转十进制类似,将十六进制数的每一位与对应的16的幂次方相乘(注意AF分别代表1015),然后将所有乘积相加得到十进制数。
-
2.二进制原码、反码、补码之间的转换
原码、反码、补码之间的转换规则如下:
正数
对于正数,其原码、反码、补码都是相同的。也就是说,如果一个数是正数,那么它的原码、反码和补码在二进制表示上完全一致。
负数
对于负数,其原码、反码、补码的转换规则如下:
-
原码:最高位(符号位)为1,其余位为该数绝对值的二进制表示。
-
反码:符号位不变,其余位按位取反(即将0变为1,将1变为0)。
-
补码:符号位不变,其余位是反码加1(也就是反码最低位加1,逢二进一)。
转换过程示例
-
原码转反码:
-
正数:不变。
-
负数:符号位不变,其余位按位取反。
-
-
反码转原码:
-
正数:不变(因为正数的原码和反码相同)。
-
负数:符号位不变,其余位再次按位取反(即恢复到原码)。
-
-
原码转补码:
-
正数:不变(因为正数的原码和补码相同)。
-
负数:符号位不变,其余位先按位取反(得到反码),然后在最低位加1(得到补码)。
-
-
补码转原码:
-
正数:不变(因为正数的补码和原码相同)。
-
负数:符号位不变,其余位先减1(得到反码,注意这里是二进制减法,需要借位),然后再次按位取反(得到原码)。或者,可以直接将补码的符号位保持不变,其余位按位取反后,在最低位再加1(注意这里的加1可能会产生进位,需要处理),然后舍弃掉溢出的最高位(如果存在的话),得到的结果就是原码。但这种方法在手工计算时可能较为复杂,容易出错,因此更常用的是第一种方法。
-
需要注意的是,在计算机中,数值通常是以补码的形式存储和运算的。这是因为补码表示法可以简化计算机中的加减法运算,使得减法运算可以通过加法运算来实现(即加上一个数的补码相当于减去这个数)。同时,补码表示法还可以避免正负零的问题(在补码表示法中,正零和负零的表示是相同的)。
3.二进制的补码运算(注意应该所取的位数)
(常常是使用补码相加完成两数相减,补码相加的和仍为补码,当符号位为1时,和为负数,这时的数值部分不是这个数的绝对值。将两数写成补码时,数值部所取的位数必须足以表示和的最大绝对值)
(1)重申补码的表示
-
正数的补码:
正数的补码与其原码相同,即符号位为0,数值位为该数的二进制表示。
-
负数的补码:
负数的补码是将原码(符号位除外)按位取反后加1。具体来说,先将原码的数值位(即符号位后的部分)按位取反(0变为1,1变为0),然后在最低位(即最右边的位)加1,如果加1后产生进位,则向高位进位。
(2)补码的运算
-
加法运算:
在二进制补码表示法中,加法运算可以直接进行,不需要考虑符号位。运算结果仍然是补码形式,如果最高位(符号位)为0,则结果为正数;如果最高位为1,则结果为负数。
-
减法运算:
减法运算可以通过加法运算来实现,即减去一个数等于加上这个数的补码。这样,减法运算就被转化为加法运算,从而简化了计算过程。
(3)运算结果的解释
-
结果的符号:
运算结果的符号由最高位(符号位)决定。如果符号位为0,则结果为正数;如果符号位为1,则结果为负数。
-
结果的数值:
对于正数结果,其数值部分就是补码去掉符号位后的部分,直接转换为十进制数即可。对于负数结果,需要先将补码转换为原码,然后再转换为十进制数。转换方法是:将补码的数值位(符号位除外)按位取反后加1,得到的就是原码。如果加1后产生进位,则向高位进位,但注意最高位(符号位)保持不变。
(4)注意事项
- 溢出处理:
在进行二进制补码运算时,如果运算结果超出了表示范围(即超出了能表示的最大正数或最小负数),就会发生溢出。溢出通常会导致结果不正确,因此在设计算法时需要特别注意溢出问题。
- 符号扩展:
在进行不同位数的二进制补码运算时,需要将较短数的符号位扩展到与较长数相同。例如,在进行8位二进制补码与16位二进制补码的运算时,需要将8位数的符号位扩展到16位。
第二章:逻辑代数基础(包含真值表、逻辑式、逻辑图、波形图、卡诺图等相关内容)
一、前置问题
1.区分约束项、任意项和无关项
(1)定义与特性
-
约束项
-
定义:在逻辑函数式中必须存在且不能省略的项,它们起到限制函数结果的作用。
-
特性:约束项是函数输出的必要条件,通常用于表示特定的情况或条件。如果缺少这些项,逻辑函数将不能正确表达所需的逻辑关系。
-
-
任意项
-
定义:在逻辑函数式中可以存在,也可以省略的项,它们不会影响函数的结果。
-
特性:任意项的存在与否不会改变函数的输出结果。因此,在逻辑函数的设计和实现过程中,可以根据需要选择是否包含这些项。
-
-
无关项
-
定义:在逻辑函数式中出现,但不影响函数的输出结果,可以通过简化或移除来简化逻辑函数的表示和计算。
-
特性:无关项在逻辑函数中不起决定性作用,它们的取值可以是任意的,不会影响函数的输出结果。因此,在逻辑函数的化简过程中,通常会将这些项视为可省略的部分。
-
(2)区别与联系
-
区别
-
必要性:约束项是必需的,不能省略;任意项和无关项则可以省略。
-
影响:约束项影响函数的结果,是函数输出的必要条件;任意项和无关项则不影响函数的结果。
-
应用场景:约束项通常用于表示特定的逻辑条件;任意项和无关项则更多地用于逻辑函数的化简和简化计算。
-
-
联系
-
逻辑函数组成部分:约束项、任意项和无关项都是逻辑函数的组成部分,共同决定了逻辑函数的输出。
-
化简过程:在逻辑函数的化简过程中,通常会利用无关项和任意项的特性来简化逻辑函数的表示和计算。
-
(3)实例说明
以逻辑函数 AND(A, B) = A && B 为例,其中 A 和 B 是逻辑变量。在这个函数中,A 和 B 是约束项,因为它们是函数输出的直接条件。如果缺少 A 或 B,逻辑函数将不能正确表达 AND 关系。
再以逻辑函数 AND(A, B, C) = A && B && C 为例,其中 C 可以视为任意项。即使省略了 C,函数的输出结果也不会改变(只要 A 和 B 都为真)。因此,在这个函数中,C 的存在与否不会影响函数的输出结果。
而在某些情况下,逻辑函数中可能存在一些变量的取值组合不会出现,或者在这些取值组合下函数的输出可以是任意的。这些变量的取值对应的最小项就称为无关项。在逻辑函数化简时,可以根据简化的需要将无关项当成“0”或“1”处理,并不影响逻辑功能。
二、常见习题类型
1.逻辑等式的证明
(1)证明方法
-
真值表法:
-
分别列出等式两边逻辑式的真值表。
-
若真值表完全相同,则等式成立。
-
-
公式和定理法:
-
利用逻辑代数的公式和定理将等式两边化为完全相同的形式。
-
常用的逻辑代数公式包括分配律、吸收律、德摩根定理等。
-
-
卡诺图法:
-
分别画出等式两边逻辑式的卡诺图。
-
若卡诺图相同,则等式成立。
-
(2)常用逻辑代数公式
-
分配律:
-
A(B + C) = AB + AC
-
(A + B)C = AC + BC
-
-
吸收律:
-
A + AB = A
-
A(A + B) = A
-
-
德摩根定理:
-
(AB)' = A' + B'
-
(A + B)' = A'B'
-
-
其他常用公式:
-
A + A'B = A + B
-
AB + A'C + BC = AB + A'C(在某些条件下成立,如BC项不影响等式结果时)
-
A(AB)' = AB'(注意这里的A(AB)'并不直接简化为AB',但可以通过其他方式证明等式两边相等)
-
证明示例
-
以证明“A + BC = (A + B)(A + C)”为例:
-
使用分配律:
-
右边 = (A + B)(A + C) = AA + AC + BA + BC = A(1 + B + C) + BC = A + BC = 左边
-
-
使用真值表法:
-
列出A、B、C的所有可能取值组合,并计算等式两边的值。
-
对比每一行的值,若都相等,则等式成立。
-
-
使用卡诺图法(略,因为卡诺图通常用于化简逻辑表达式,但也可用于验证等式)。
注意事项
-
在证明过程中,要确保每一步都符合逻辑代数的规则。
-
当使用真值表法时,要确保列出所有可能的取值组合。
-
当使用卡诺图法时,要正确绘制卡诺图并遵循卡诺图的化简规则。
2.逻辑函数不同描述方法之间的转换
逻辑函数是用于描述逻辑运算的一种函数形式,在数学、计算机科学等领域有广泛应用。逻辑函数有多种描述方法,包括真值表、逻辑表达式、逻辑图和波形图等。
(1)真值表与逻辑表达式的转换
-
真值表到逻辑表达式的转换
-
列出逻辑函数的所有输入组合及其对应的输出。
-
观察真值表,找出输出为1的输入组合。
-
为每个这样的组合写出逻辑项(输入变量及其非变量的组合,使得该逻辑项为1)。
-
将这些逻辑项用逻辑或运算符连接起来,得到逻辑函数的最小项表达式或最大项表达式。
-
-
逻辑表达式到真值表的转换
-
列出逻辑函数的所有输入组合。
-
根据逻辑表达式计算每个输入组合的输出值。
-
将所有输入组合及其对应的输出值整理成真值表。
-
(2)逻辑表达式与逻辑图的转换
-
逻辑表达式到逻辑图的转换
-
根据逻辑表达式确定所需的逻辑门类型和数量。
-
按照逻辑表达式的结构,用相应的逻辑门连接输入变量和输出变量,得到逻辑图。
-
-
逻辑图到逻辑表达式的转换
-
观察逻辑图,识别出各个逻辑门及其输入输出关系。
-
根据逻辑门的逻辑功能,写出对应的逻辑表达式。
-
将这些逻辑表达式组合起来,得到整个逻辑函数的逻辑表达式。
-
(3)真值表与逻辑图的转换
-
真值表到逻辑图的转换
-
根据真值表找出输出为1的输入组合。
-
为每个这样的组合设计一个逻辑门,使得该逻辑门的输出为1。
-
将这些逻辑门的输出用逻辑或运算连接起来,得到整个逻辑函数的逻辑图。
-
-
逻辑图到真值表的转换
-
根据逻辑图确定逻辑函数的所有输入组合。
-
根据逻辑图中逻辑门的功能,计算每个输入组合的输出值。
-
将所有输入组合及其对应的输出值整理成真值表。
-
(4)波形图与其他描述方法的转换
-
波形图到逻辑表达式的转换
-
需要确定输入序列,并使用逻辑表达式计算每个时间点的输出。
-
通过分析波形图上的输入变量与函数输出的取值变化,可以推导出对应的逻辑表达式。
-
-
逻辑表达式到波形图的转换
-
同样需要确定输入序列,并使用逻辑表达式计算每个时间点的输出。
-
在时间轴上标注输出的变化情况,从而绘制出波形图。
-
-
真值表到波形图的转换
-
将真值表中所有的输入变量与对应的输出变量取值依次排列画成以时间为横轴的波形。
-
这通常用于描述时序逻辑电路,其中电路的输出会随着时间而变化。
-
-
波形图到真值表的转换
-
从波形图上找出每个时间段里输入变量与函数输出的取值。
-
将这些输入、输出取值对应列表,就得到了所求的真值表(但这种方法通常不如直接从逻辑表达式或逻辑图转换来得直接和准确)。
-
3.逻辑函数形式的变换
逻辑函数形式的变换是数字电路和逻辑设计中的重要内容,它涉及将逻辑函数从一种形式转换为另一种形式,以满足特定的设计需求或简化电路结构。
(1)基本形式与标准形式
-
基本形式
-
“与—或”(积之和)表达式:若干与项(积项)进行或运算构成的表达式。
-
“或—与”(和之积)表达式:若干或项(和项)进行与运算构成的表达式。
-
-
标准形式
-
最小项(标准与项)mi:值为1时的变量取值组合数最少的与项。n个变量可以构成2的n次方个最小项。
-
最大项(标准或项)Mi:值为1时的变量取值组合数最多的或项。n个变量可以构成2的n次方个最大项。
-
最小项表达式(标准与—或表达式):由若干最小项相或构成。
-
最大项表达式(标准或—与表达式):由若干最大项相与构成。
-
(2)变换方法
-
利用摩根定理
-
摩根定理是逻辑函数变换中的重要工具,它允许我们将与或形式转换为与非—与非形式,或者将或与非形式转换为其他形式。
-
例如,将逻辑函数Y=AB’+A’BD+CD’化为与非—与非形式,可以利用摩根定理将整个与或式进行两次求反。
-
-
利用真值表
-
真值表是逻辑函数的一种直观表示方法,它列出了所有可能的输入变量组合及其对应的输出变量值。
-
通过真值表,我们可以方便地找到使函数值为1的输入变量组合,从而构造出逻辑函数的与或表达式。
-
同时,真值表也可以用于将逻辑函数转换为卡诺图,进而进行化简和优化。
-
-
利用卡诺图
-
卡诺图是一种用于逻辑函数化简和优化的图形工具。
-
在卡诺图中,我们可以将逻辑函数的最小项或最大项表示为小方格内的值(1或0)。
-
通过合并相邻的1方格或0方格,我们可以找到逻辑函数的最简表达式。
-
-
利用对偶规则和反演规则
-
对偶规则允许我们将逻辑函数中的“0”和“1”互换,“与”和“或”互换,从而得到一个新的逻辑函数——对偶式。
-
反演规则则允许我们将逻辑函数中的“与”变为“或”,“或”变为“与”,“0”变为“1”,“1”变为“0”,并取反变量,从而得到一个新的逻辑函数——反函数。
-
(3)变换实例
-
与或——>与非—与非
-
利用摩根定理将整个与或式进行两次求反。
-
-
与或——>与或非
-
首先画出逻辑函数的卡诺图。
-
然后将卡诺图中的0合并,得到逻辑函数的反函数。
-
最后对反函数求反,得到与或非形式的逻辑函数。
-
-
与或——>或非—或非
-
先将与或式转换成与或非式。
-
然后用摩根定理将与或非中的每个乘积项化为或非的形式。
-
4.逻辑函数的化简
(1)公式法化简
-
并项法
-
利用公式AB + AB' = A,将两个与项合并为一个,消去其中的一个变量。这种方法类似于合并同类项。
-
-
吸收法
-
利用公式A + AB = A,吸收多余的与项。这可以看作是一个包含关系,即如果A为真,则AB也为真,因此A + AB可以简化为A。
-
-
消项法
-
利用公式AB + A'C + BC = AB + A'C(在某些情况下,BC项可以被消去,因为它不影响最终的结果,但这取决于具体的逻辑函数),或者利用更一般的配项法来消去更多的与项。需要注意的是,这种方法并不是总是适用,而是需要根据具体的逻辑函数来判断。
-
-
消因子法
-
利用公式A + A'B = A + B,消去与项多余的因子。这可以看作是将一个与项中的多余部分去掉,只保留对结果有影响的部分。
-
-
配项法
-
利用公式A + A = A和A + A' = 1进行配项,以简化表达式。这种方法通常用于在逻辑表达式中添加或删除某些项,以便更容易地找到化简的路径。
-
(2)卡诺图化简法
卡诺图是一种用于逻辑函数化简的图形工具,它将n变量的全部最小项各用一个小方块表示,并使具有逻辑相邻性的最小项在几何位置上相邻排列。
-
表示最小项的卡诺图
-
将逻辑变量分成两组,分别在两个方向用循环码形式排列出各组变量的所有取值组合,构成一个有2^n个方格的图形。
-
每个方格对应变量的一个取值组合,具有逻辑相邻性的最小项在位置上也相邻地排列。
-
-
用卡诺图化简逻辑函数
-
将已知逻辑函数式化为最小项之和形式,或者根据函数式直接填卡诺图。
-
在卡诺图中,将函数式中包含的最小项对应的方格填1,其余方格填0。
-
根据卡诺图的化简规则,合并相邻的1方格,以消去互反变量,达到化简的目的。
-
化简后的逻辑函数可以由合并后的方格所代表的最小项相或得到。
-
(3)化简步骤和注意事项
-
公式法化简步骤
-
首先分析逻辑函数的表达式,找出可以应用的化简公式。
-
按照化简公式的规则,逐步化简表达式。
-
最后得到最简化的逻辑函数表达式。
-
-
卡诺图化简步骤
-
画出逻辑函数的卡诺图。
-
在卡诺图中标出所有使函数值为1的输入组合(即1方格)。
-
根据卡诺图的化简规则,合并相邻的1方格。
-
写出化简后的逻辑函数表达式。
-
-
注意事项
-
在化简过程中,要注意保持逻辑函数的等价性,即化简前后的逻辑函数应该具有相同的输入-输出关系。
-
在使用卡诺图化简时,要确保所有的1方格都被圈到,不能遗漏。
-
在选择化简方法时,要根据具体的逻辑函数和化简需求来选择最合适的方法。
-
第三章:组合逻辑电路
一、前置知识
1.为什么有的书中有时把表示反相的小圆圈画在逻辑图形符号的输入端?怎样分析这种图形符号的逻辑功能
可以视作代表输入信号经过反相后才加到后面的输入端,故可以视为代替了输入端的一个反相器。