文章目录
计算机系统的组成
- 中央处理单元:CPU
计算机的类型
- 按照体积和工作能力
- 巨型机,大型机,小型机,微型机,微型机分为台式机,膝上型计算机,笔记本电脑,工作站,掌上计算机和个人数字助理等
- 按照功能是否专一
- 通用计算机
- 专用(嵌入式)计算机
- 按照 CPU 的指令系统架构
- 复杂指令系统计算机
- 精简指令系统计算机
- 按照体系结构及指令处理方式
- 单指令流单数据流计算机
- 单指令流多数据流计算机
- 多指令流单数据流计算机
- 多指令流多数据流计算机
- 计算机应用领域
- 数值计算
- 数据(或信息)处理
- 实时控制(或过程控制)
- 人工智能
- 计算机辅助设计
- 计算机辅助教学
- 计算机辅助管理等方面
- 计算机主要功能
- 处理文字,数值,声音,图形图像等
- 在计算机内部,各种信息都必须经过数字化编码后才能被传送,存储,处理
- 所谓编码,就是采用少量的基本符号,选用一定的组合原则,以表示大量复杂多样的信息
计算机中数据的表示和运算(重点)
进位计数制
- 在采用进位计数制的数字系统中,如果只用一个基本符号 # 表示数值,则称其为 # 进制,# 称为此进制的基数
- 不同数制的共同特点
- 每一种数制都有固定的符号集,如十进制的基数有十个:0,1,2,3,4,5,6,7,8和9,二进制的基数有两个:0和1
- 每一种数制都使用位置表示法,即处于不同位置的基数所代表的值不同,它所表示的数值大小与它所在位置的权值(位权)有关,如十进制数 1234.56 可表示为:
1234.56 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100 + 5 * 10-1 + 6 * 10-2
二进制的 100101011 可表示为
100101011 = 1 * 28 + 0 * 27 + 0 * 26 + 1 * 25 + 0 * 24 + 1 * 23 + 0 * 22 + 1 * 21 + 1 * 20 - 可以看出,各种进位计数制中的位权就是基数的某次幂
- 二进制是计算机中最常使用的计数法,一个二进制的 0 或者 1 占用一个比特(bit)的存储空间
- 可以用 3 位 二进制数 表示 1位 八进制数,可以用 4 位 二进制数 表示 1 位 八进制数
进制之间的转换
十进制的转换
- 任何进制转换成十进制,都可以使用按位权展开相加法来计算
- 二进制转换成十进制,如
1010.01(B) = 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20 + 0 * 2-1 + 1 * 2-2 = 8 + 0 + 2 + 0 + 0 + 0.25 = 10.25(D) - 八进制转换成十进制,如
123.45(O) = 1 * 82 + 2 * 81 + 3 * 80 + 4 * 8 -1 + 5 * 8 -2 = 64 + 16 + 3 + 0.5 + 0.078125 = 83.578125(D) - 十六进制转换成十进制,如
12.3(H) = 1 * 161 + 2 * 160 + 3 * 16-1 = 16 + 2 + 0.1875 = 18.1875(D)
二进制的转换
十进制转换二进制
- 方法一:把整数部分和小数部分分开来计算,整数部分用 除二取余法,小数部分用 乘二取整法,如
123.45(D) ≈ 1111011.0111(B){123除二取余为 1111011}
- 除二取余法:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
- 原理:位权的大小是以基数为底,数字符号所处的位置的序号为指数的整数次幂。十进制数的百位、十位、个位、十分位的权分别是10的2次方、10的1次方、10的0次方,10的-1次方。二进制数就是2的n次幂。按权展开求和正是非十进制化十进制的方法。举个十进制整数转换为二进制整数的例子,假设十进制整数A化得的二进制数为edcba 的形式,那么用上面的方法按权展开, 得
A=a(20)+b(21)+c(22)+d(23)+e(24) (后面的和不正是化十进制的过程吗)
假设该数未转化为二进制,除以基数2得
A/2=a(20)/2+b(21)/2+c(22)/2+d(23)/2+e(24)/2
注意:a除不开二,余下了!其他的绝对能除开,因为他们都包含2,而a乘的是1,他本身绝对不包含因数2,只能余下。
商得:
b(20)+c(21)+d(22)+e(23),再除以基数2余下了b,以此类推。
当这个数不能再被2除时,先余掉的a位数在原数低,而后来的余数数位高,所以要把所有的余数反过来写。正好是edcba - 乘二取整法:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,此时0或1为二进制的最后一位。或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
- 原理:关于十进制小数转换为二进制小数,假设一十进制小数B化为了二进制小数0.ab的形式,同样按权展开,得
B=a(2-1)+b(2-2)
因为小数部分的位权是负次幂,所以我们只能乘2,得
2B=a+b(2-1)
注意a变成了整数部分,我们取整数正好是取到了a,剩下的小数部分也如此。值得一提的是,小数部分的按权展开的数位顺数正好和整数部分相反,所以不必反向取余数了。 - 方法二:把十进制数写成按二进制位权的大小展开的多项式,再按位权从高到低依次取各项系数就可以得到相应的二进制数,如
123.45(D) = 64 + 32 + 16 + 8 + 2 + 1 + 0.25 + 0.125 + 0.0625 + …… = 26 + 25 + 24 + 23 + 21 + 20 + 2-2 + 2-3 + 2-4 + …… ≈ 1111011.0111(B)
八进制,十六进制转成二进制
- 同理,每一位十六进制用四位二进制数表示
- 首尾的 0 可以省略
- 例:123.54(O) = 001 010 011.101 100 = 1010011.1011(B)
1010011.1011(B) = 001 010 011.101 100 =123.54(O)
ABC.123(H) = 1010 1011 1100.0001 0010 0011 = 101010111100.000100100011(B)
101010111100.000100100011(B) = 1010 1011 1100.0001 0010 0011 = ABC.123(H)
十进制转八进制,十六进制
- 类似于十进制转二进制,十转八是整数部分 除八取余,小数部分 乘八取整,十转十六是整数部分 除十六取余,小数部分 乘十六取整
- 例 67.89(D) ≈ 103.7075(O)
- 例 67.89(D) ≈ 43.E3D7(H)
八进制和十六进制转换
- 先转换成二进制,然后再转换
总
- 任何进制转换成十进制,都可以使用按位权展开相加法来计算
- 十进制转换成任何进制,都可以使用 整数除进制基数逆向取余,小数乘进制基数顺序取整
二进制运算规则
- 算法和十进制没什么区别
- 整数部分和整数部分,小数和小数部分对应位进行运算
加法
- 二进制加法的进位规则是 逢二进一
0 + 0 = 0 1 + 0 = 1 0 + 1 = 1 1 + 1 = 0(有进位)
减法
- 二进制减法的进位规则是 借一当二
0 - 0 = 0 1 - 0 = 1 1 - 1 = 0 0 - 1 = 1(有借位)
乘法
- 同一为一,否则为零
0 × 0 = 0 1 × 0 = 0 0 × 1 = 0 1 × 1 = 1
除法
0/0(无意义) 0/1=0 1/0(无意义) 1/1=1
机器数和码制
- 各种数据在计算机中的表示称为机器数,采用二进制计数制小数点隐含表示而不占位置,机器数对应的实际数值称为数的真值
例:10(D) = 1010(B)10为真值,1010为10在计算机中的机器数 - 机器数有无符号和有符号之分,无符号数表示正数,在机器数中没有符号位只有数值位
- 有符号数的最高位为符号位,用于表示数值的正负除最高位以外,其余位为数值位
- 小数点在机器数最低数值位之后的数为纯整数,小数点在机器数最高数值位之前的数为纯小数
- 正数的反码,补码和原码相同
例:100可以看成100.0,是纯整数,0.11小数点前是0,是纯小数
- 机器数前提是要有机器字长
反码
- 注:反码是对其正数的反码,也可以理解成正数的原码进行取反
补码
- 注意,负数的补码是对反码的末尾加 1,比如:n=8,[-0.5]反=1.0111111,所以 [-0.5]补=1.0111111+0.0000001=1.1000000
移码
定点数和浮点数(了解)
例
11.0101(B)= 0.110101 × 22,2(幂数) 为阶码,0.110101 为尾数
十进制数与字符编码表示
- BCD 编码:用四位二进制数表示一位十进制数
- 8421BCD 码:和正常的四位二进制数表示一位十进制数一样(8,4,2,1 依次为 2 的 3,2,1,0 次幂)
- 余 3BCD码:除去前三个,(即 0000,0001,0010)从 0011 开始,依次加一的二进制表示,或者每个 8421 码基础上加 3
- 格雷码(不常用):相邻两个代码之间只有一位不同,不同位从 1 开始依次是 4,3,4,2,1,2,3,2,1
- 有权码:自然二进制代码是按照二进制代码各位权值大小,以自然向下加一,逢二进一的方式来表示数值的大小所生成的代码,比如 8421 码是应用最多的有权码(有位权)
- 无权码:没有位权
ASCII 码
- 0:0110000(从 0 开始第 48 个)
- A:1000001(65)
- a:1100001(97)
汉字编码
- 输入码,内部码,字形码依次理解为
输入方法,存储方法,输出方法
输入码
内部码
字形码
校验码
- 主要检测数据传输过程中是否有误
- 码距:一个编码系统中任意两个合法编码之间的差距
奇偶校验码
- 带奇校验位的 8421 码:算上奇校验位(共 5 位)使得其 1 的位数是奇数个
- 带偶校验位的 8421 码:算上偶校验位(共 5 位)使得其 1 的位数是 0 个或偶数个
- 某字符的 ASCII 码值用十进制表示为 69 ,若用二进制形式表示并将最高位设置为偶校验位,则为 11000101
汉明码(海明码)
- 首先确定校验码 P 在汉明码中的个数 n 和位置,求校验位个数 n 的公式为 2n >= R + n + 1,P 在 2n 的位置,R 为传输数据的位数,满足条件的最小的 n 即为校验位个数,当 R=8时,取 n=4,即插入四位,在 20,21,22,23 四个位置放校验码(数据位加上校验位就是汉明码的总位数)
- 转换信息位:将每一位信息位转换成阶乘方式
D0=3=21+20(D0 在汉明码的第 3 位,所以将 D0 转换成 3,下面同理)
D1=5=22+20
D2=6=22+21
D3=7=22+21+20
D4=9=23+20
……
- 偶校验
p1=D0⊕D1⊕D3⊕D4⊕D6
p2=D0⊕D1⊕D3⊕D4⊕D6
p3=D1⊕D2⊕D3⊕D7
p4=D4⊕D5⊕D6⊕D7
Pn 等于包含有相对应 2n-1 项的信息码相异或,比如 P1 就找转换信息位中含有 20 的,有 D0,D1,D3,D4,D6
(异或:相同值的异或值为 0,不同值的异或值为 1) - 奇校验
将 p1p2p3p4 取反,即 1 变成 0,0 变成 1
- 检测错误
G1=p1⊕D0⊕D1⊕D3⊕D4⊕D6
G2=p2⊕D0⊕D1⊕D3⊕D4⊕D6
G3=p3⊕D1⊕D2⊕D3⊕D7
G4=p4⊕D4⊕D5⊕D6⊕D7
若采用偶校验则 G1G2G3G4 全为 0表示接收到数据无错误,奇校验全为 1 表示接收到数据无错误,否则表示有错误,而且 G4G3G2G1 指出了错误位置,例如G4G3G2G1=1010(B)=10(D),表示海明码第 10 位出错,即 D5 出错,将其取反即可纠正错误
循环冗余校验码
- 数据位和校验位单独放,不混一起,左边为数据,右边为校验码
- 例
在冗余校验码中,多项式为 X4+X1+1,信息码为 10111,则计算出 CRC 校验码是多少? - 解
根据多项式 X4+X1+1=124+023+022+121+1*20=10011
信息码 X 的最高次方为 4 次方,则在其后面补 4 个 0,得到 101110000
把调整的信息码和多项式相除:101110000/10011=10100余1100(注意这里加减不进位和借位,是模 2 运算,也可以理解为相异或)
得到的余数就是校验码,则校验码为 1100,则相应的 CRC 校验码为 101111100
逻辑代数与逻辑运算
- 逻辑代数也叫布尔代数,只有两个值,真,假,通常用 1 表示 真,0 表示 假
基本逻辑运算
- 与:0 和 1 的乘法,全 1 为 1,否则为 0
- 或:0 和 1 的加法,有 1 为 1,全 0 为 0
- 非:取反,1 变 0,0 变 1
- 异或:相同为 0,否则为 1
- 同或运算:用 ⊙ 表示,设 A 和 B 为两个逻辑变量,当且仅当 A,B 的值相同时,A 同或 B 为真,即 A ⊙ B = A * B + A~ (A 取反)* B~(B 取反)
- 同或:相同为 1,不同为 0
常用逻辑公式
- 交换律:A+B=B+A,A*B=B * A
- 结合律:A+(B+C)=(A+B)+C,A*(B*C)=(A * B)*C
- 分配率:A*(B+C)=A * B+A * C,A+(B * C)=(A+B)*(A+C)
- 反演律:(A+B)~=A~ * B~,(A*B)~=A~+B~
- 重叠率:A+A=A,A*A=A
- 互补率:A~+A=1,A~*A=0
- 吸收率:A+A~B=A+B
- 0-1率:0+A=A,0 * A=0,1+A=1,1 * A=A
- 对合律:(A~)~=A
- 其他公式:A * B+A * B~=A,A+A * B=A,A * B+A~ * C+B * C=A * B+A~ * C,(A⊕B)~=A~⊕B=A⊕B~
逻辑表达式的化简
- 真值表:表征逻辑事件输入和输出之间全部可能状态的表格
- 例:
用真值表证明吸收率 A + A~B = A + B
A | B | A~B | A+A~B | A+B |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 0 | 1 | 1 |
用真值表证明吸收率 A~ + AB = A~ + B
A | B | A~ | AB | A~+AB | A~+B |
---|---|---|---|---|---|
0 | 0 | 1 | 0 | 1 | 1 |
0 | 1 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 1 | 1 | 1 |
AB+AB~=A(B+B~)=A*1=A
机器数的运算
机器数的加减运算
- 计算机中机器数的加减运算用补码加减法,不用原码加减法
- 负数的补码等于它的除符号位的其他位取反,然后末尾加 1
- 由 X补 求 -X补 的方法:X补的各位取反(包括符号位),末尾加 1
- 例
10001010原 的补码 X补=11110110
-X补=00001010 - 注:两个负数相加时溢出位不能丢弃,而是保持其符号位不变,将除符号位的其他位相加,如 10110101+10011011,保持符号位 1 不变,让 0110101 加 0011011,结果为1010000,将符号位 1 放到符号位,所以最终结果为 11010000