1. 数制和编码
1.1 进位计数制及其相互转换
1.1.1 进位计数制
二进制: 0,1
好处:
①可使用两个稳定状态的物理器件表示
②0,1正好对应逻辑值假、真。方便实现逻辑运算
③可很方便地使用逻辑门电路实现算术运算
八进制: 0,1,2,3,4,5,6,7
十进制: 0,1,2,3,4,5,6,7,8,9
十六进制: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
1.1.2 不同进制间的相互转换
1.任意进制→十进制
2.二进制转八进制、十六进制
3.十进制转任意进制
整数部分:除基取余法,先取得的“余”是整数的低位。
小数部分:乘基取余法,先取的“整”是小数的高位
各种进制的常见书写方式:
1.2 真值和机器数
真值:符合人类习惯的数字
机器数:数字实际存到机器里的形式,正负号需要被“数字化”
1.3 字符与字符串
1.4 校验码(考纲删除,计网会考)
1.4.1 奇偶校验码
由若干位代码组成的一个字叫码字。
将两个码字逐位进行对比,具有不同的位的个数称为两个码字间的距离。
一种编码方案可能有若干个合法码字,各合法码字间的最小距离称为“码距”。
当d=1时,无检错能力;当d=2时,有检错能力;当d≥3时,若设计合理,可能具有检错、纠错能力
奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
1.4.2 海明校验码
海明码设计思路:将信息位分组进行偶校验—> 多个校验位—>多个校验位标注出错位置
1.4.3 循环冗余校验码
循环冗余校验(Cyclic Redundancy Check, CRC)
1.5 练习
C
AC
2. 定点数的表示和运算
2.1 定点数的表示
2.2.1 无符号数的表示
无符号数:整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。
2.2.2 有符号数的表示
原码
定义:用尾数表示真值的绝对值,符号位“0/1”对应“正/负”。
若机器字长n+1位,原码整数的表示范围:−(2n−1) ≤ x ≤ 2n−1(关于原点对称)真值0有+0 和-0 两种形式。
原码小数的表示范围:−(1−2−n) ≤ x ≤ 1−2−n(关于原点对称)真值0有+0 和-0 两种形式。
反码
定义:若符号位为0,则反码与原码相同若符号位为1,则数值位全部取反。
若机器字长n+1位,反码整数的表示范围:−(2n−1) ≤ x ≤ 2n−1(关于原点对称)真值0有+0 和-0 两种形式。
反码小数的表示范围:−(1−2−n) ≤ x ≤ 1−2−n(关于原点对称)真值0有+0 和-0 两种形式。
补码
定义:正数的补码=原码;负数的补码=反码末位+1(要考虑进位)。
定点整数补码[x]补= 1,0000000表示x = -27
若机器字长n+1位,补码整数的表示范围:−2n ≤ x ≤ 2n−1 (比原码多表示一个−2n )
定点小数补码[x]补= 1.0000000表示x = -1
若机器字长n+1位,补码小数的表示范围:−1 ≤ x ≤ 1−2−n (比原码多表示一个−1 )
补码的真值0只有一种表示形式,[+0]补= [-0]补= 00000000
eg:将负数补码转回原码的方法相同:尾数取反,末位+1
作用: 使用补码可将减法操作转变为等价的加法,ALU中无需集成减法器。执行加法操作时,符号位一起参与运算。
移码
定义:补码的基础上将符号位取反。注意:移码只能用于表示整数。
[+0]移= [-0]移= 10000000。
若机器字长n+1位,移码整数的表示范围:−2n ≤ x ≤ 2n−1 (与补码相同)\
由[x]补快速求[-x]补的方法: 符号位、数值位全部取反,末位+1
作用: 移码表示的整数很方便对比大小。
2.2 定点数的运算
2.2.1 移位运算
原码
符号位保持不变,仅对数值位进行移位。
右移: 高位补0,低位舍弃。若舍弃的位=0,则相当于÷2;若舍弃的位≠0,则会丢失精度。
左移: 低位补0,高位舍弃。若舍弃的位=0,则相当于×2;若舍弃的位≠0,则会出现严重误差。
反码
正数的反码与原码相同, 因此对正数反码的移位运算也和原码相同。
右移:高位补0,低位舍弃。左移:低位补0,高位舍弃。
负数的反码数值位与原码相反, 因此负数反码的移位运算规则如下,
右移:高位补1,低位舍弃。左移:低位补1,高位舍弃。
补码
正数的反码与原码相同, 因此对正数补码的移位运算也和原码相同。
右移:高位补0,低位舍弃。左移:低位补0,高位舍弃。
负数补码的算数移位规则如下:
右移(同反码): 高位补1,低位舍弃。
左移(同原码): 低位补0,高位舍弃。
逻辑移位
逻辑右移:高位补0,低位舍弃。逻辑左移:低位补0,高位舍弃。
循环移位
不带进位位:用移出的位补上空缺。
带进位位:移出的位放到进位位,原进位位补上空缺。
2.2.2 加减运算
原码
补码
由[x]补快速求[-x]补的方法: 符号位、数值位全部取反,末位+1
溢出判断:
只有“正数+正数”才会上溢——正+正=负
只有“负数+负数”才会下溢——负+负=正
2.3.3 乘法
原码
补码
2.3.4 除法
原码
补码
2.3 C语言中的整数类型及类型转换
符号扩展:
定点整数的符号扩展: 在原符号位和数值位中间添加新位,正数都添0;负数原码添0,负数反、补码添1
定点小数的符号扩展: 在原符号位和数值位后面添加新位,正数都添0;负数原、补码添0,负数反码添1
2.4 数据的存储和排列
练习
D
3. 浮点数的表示和运算
3.1 浮点数的表示
阶码: 常用补码或移码表示的定点整数
尾数: 常用原码或补码表示的定点小数
浮点数尾数的规格化:
规格化浮点数: 规定尾数的最高数值位必须是一个有效值。
左规: 当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减1。
右规: 当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1。
3.2 浮点数的加减运算
练习
B