【考纲内容】
(一)数制与编码
进位计数值机器相互转换; 定点数的编码表示
(二)运算方法和运算电路
基本运算部件:加法器; 算术逻辑单元(ALU)
加/减运算:补码加/减运算;标志位的生成
乘/除运算:乘/除法运算的基本原理; 乘法电路和除法电路的基本结构
(三)整数的表示和运算
无符号整数的表示和运算;有符号整数的表示和运算
(四)浮点数的表示和运算
浮点数的表示; IEEE754标准; 浮点数的加/减法运算
【复习提示】
这一章节的内容比较复杂,因为计算机中数的表示和运算方法与人们日常生活中的表示和运算方法不同,所以理解起来相对比较困难。需要反复的记忆和练习总结,牢固的掌握
关于王道书本上的“需要思考的四个问题”
1)在计算机中,为什么要采用二进制来表示数据?
在计算机系统内部,所有信息都是用二进制进行编码的,这样做的原因由以下三点
- 二进制只有两种状态,使用由两个稳定状态的物理期间就可以表示二进制数的每一位,制造成本比较低,例如用高低电平或电荷的正负极性都可以很方便的表示0和1
- 二进制位1和0正好与逻辑值“真”和“假”相对应,为计算机实现逻辑运算和程序中的逻辑判断提供了便利条件
- 二进制的编码和运算规则都很简单,通过逻辑门电路能方便的实现算术运算
2)计算机在字长足够的情况下能够精确地表示每一个数吗?如果不能,请举例说明。
不能,二进制可以表示任何一个整数,但是有的小数无法用二进制来进行表示,比如十进制的0.3
3)字长相同的情况下,浮点数和定点数的表示范围和精度有什么区别?
字长相同的时候没浮点数取字长的一部分作为了阶码,所以表示的范围比定点数大,而取一部分作为阶码也就代表着尾数部分的有效数位减少了,而定点数字长的全部位都用来表示数值本身,精度要比同字长的浮点数更大。
4)用移码表示浮点数的阶码有什么好处?
1.浮点数进行加减运算时,要比较阶码的大小,移码比较大小比较方便。
2.检验移码的特殊值比较容易(0和max)。阶码以移码编码时的特殊值如下。0:表示指数为负无穷大,相当于分数分母变的无穷大,整个数无穷接近0,在尾数也为0时可用来表示0;尾数部位0表示没有规格化的数。max:表示指数正无穷大,若尾数为0,则表示浮点数超出表示范围(正负无穷大);尾数不为0,则表示浮点数运算错误(NaN)
2.1数制与编码
2.1.1 进位计数值及其相互转换
1. 进位计数法
常用的进位计数法有十进制,二进制,八进制,十六进制等。十进制数是日常生活中最常用的,而计算机中通常使用二进制数,八进制数,十六进制数。
在进位计数法中,每个数位所用到的不同数码的个数称为基数。每个数码所表示的数值等于该数码本身乘以一个与它所在数位有关的常数,这个常数称为位权。一个进位数的数值大小就是它的各位数码按权相加
可以用后缀字母标识一个数的进位计数制,用B表示二进制,用O表示八进制,用D表示十进制(十进制一般省略),用H表示16进制,有时也用前缀0x表示十六进制数。
2. 不同进制数之间的相互转换
(1) 二进制数转换为八进制数和十六进制数
在转换时按小数点为界,其整数部分,从小数点开始往左数,将一串二进制数分为3位(八进制)一组或4位一组(十六进制),在数的左边可以根据需要加‘0’补齐;对于小数部分,从小数点开始往右数,也将一串二进制数分为3位一组或4位一组,在数的右边也可根据需要加‘0’补齐。
十进制转化成别的方法也要掌握,这里不过多展示
3. 总结:
2.1.2定点数的编码表示
1.真值和机器数
2.机器数的定点表示
计算机中有两种数据格式:定点表示和浮点表示。(按照小数点的位置是否固定来区分)
在现代计算机中
通常用 补码整数表示整数
用原码小数表述浮点数的尾数部分
用移码表示浮点数的阶码部分
定点表示法表示定点小数和定点整数:
1.定点小数:定点小数是纯小数(纯小数就是整数部分全是0,就是我们所说的0.****)
通常我们约定定点小数的小数点在符号位之后、有效数值部分最高位之前。
2.定点整数,定点整数是纯整数(也就是说没有小数部分)
通常我们约定定点整数的小数点位置在有效数值部分最低位之后
事实上,在机器内部并没有小数点,只是人为约定了小数点的位置
3.原码,补码,反码,移码
1)原码表示法
用机器数的最高位表示数的符号,其余各位表示数的绝对值
原码的范围
原码表示的优点:
1)与真值对应关系简单,直观,与真值的转换简单
2)用原码实现乘除运算比较简便
原码表示的缺点
1)0的表示不唯一(有+0和-0两个编码)
2)原码加减运算比较复杂
2)补码表示法
正数的补码和原码相同,负数的补码等于模与该负数的绝对值之差
补码表示中的加减乘除操作统一用加法操作来实现
补码的表示范围
补码和真值的相互转换
3)反码表示法
正数的反码等于它的原码,负数的补码可采用“各位取反,末位加1”的操作得到
4)移码表示法
移码就是在真值x上加上一个偏置值,通常这个数取2的n次方
移码常用来表示浮点数的阶码,它只能表示整数
移码的特点
1)移码中0的表示唯一
2)一个真值的移码和补码仅差一个符号位
3)移码全0时,对应的真值的最小值-2的n次方,移码全1时,对应真值2的n次方-1
4)移码保持了数据原有的大小顺序,移码大真值就大,移码小真值就小
四种编码表示的总结
1)原码,补码,反码的符号位相同,正数的机器码相同
2)原码,反码的表示在数轴上对称,二者都存在+0和-0两个0
3)补码,移码的表示在数轴上不对称,零的表示唯一,他们比原码,反码多表示一个数
4)原码很容易判断大小,而负数的补码,反码很难直接判断大小,可采用如下规则快速判断:对于负数,数值部位越小,其绝对值越大,即负的越多
2.1.3BCD码
用二进制编码的十进制
这三BCD码的表示只不过是改变了对应位置的权值
要注意8421码是用来表示十进制的,所以一位最多就只能表示9,也就是1001,再大就无效了
总结
2.1.4整数的表示
1.无符号整数的表示
2.有符号整数的表示
2.1.5 C语言中的整数类型及类型转换
这部分看王道书P32-33
主要掌握
1)有符号数和无符号数之间的转换
2)不同字长之间的数的转换
3)掌握零扩展和符号扩展的应用
2.2运算方法和运算电路
2.2.1 基本运算部件
1.带标志加法器
王道书P40
2.算数逻辑单元(ALU)
这一部分配合b站视频和王道书掌握
2.2.2 定点数的移位运算
1.逻辑移位
逻辑移位将操作数视为无符号整数。逻辑移位的规则:左移时,高位移出,低位补0;右移时,低位移出,高位补0,对于无符号整数的逻辑左移,若高位的1移出。则发生溢出
2.算术移位
算数移位需要考虑符号位的问题,也就是将操作数视为有符号整数。
对于有符号整数的移位操作应采用补码算术移位表示,
算术移位的规则:
左移时,高位移出,低位补0,若移出的高位不同于移位后的符号位,即左移前后的符号位不同,则发生溢出;右移时,低位移出,高位补符号位,若低位的1移出,则影响精度。例如,补码1001和0101左移时会发生溢出,右移时会丢失精度。
2.2.3 定点数的加减运算
1.补码的加减运算
(A+B)补 = (A)补+(B)补
(A - B)补 = (A)补+(-B)补
补码运算的特点
1)按二进制运算规则运算,逢二进一
2)若做加法,两个数的补码直接相加;若做减法,则将被减数与减数的负数补码相加
3)符号位与数值为一起参与运算,加,减运算结构的符号位也在运算中直接得出
4)最终运算结果的高位丢弃,保留n+1位,运算结果也是补码
2.溢出判别方法
补码定点数加减运算溢出判断的方法有三种
1)采用一位符号位
2)采用双符号位
3)采用一位符号位根据数值位的进位情况判断溢出
这个问题详细看王道书P41-42
3.加减运算电路
王道书P42-43细看吃透
2.2.4定点数的乘除运算
1.定点乘法运算
2.除法运算
王道书+视频课
2.3浮点数的表示与运算
2.3.1浮点数的表示
1.浮点数的表示格式
2.浮点数的表示范围
3.浮点数的规格化
4.IEEE754标准
5.定点和浮点的表示区别
2.3.2 浮点数的加减运算
1.对阶
2.尾数加减
3.尾数规格化
4.舍入
5.溢出判断
2.3.3 C语言中的浮点数类型
2.2.4数据的大小端和对齐存储
1.数据的“大端方式”和“小端方式”存储
2.数据按“边界对齐”方式存储