Article directory:
1. The carry count system and its mutual conversion
Extension: Online base conversion
2. The truth value and the number of machines
5.1 Hamming code solution steps
5.2 CRC (Cyclic Redundancy Code) solution steps [computer network is also involved]
1. Representation of fixed-point numbers
2. Operations on fixed-point numbers
2.3 Multiplication and division operations
1. Representation of floating point numbers
2. Addition and subtraction of floating point numbers
Four: Arithmetic logic unit ALU
本章内容较为繁杂,由于计算机中数的表示和运算方法与人们日常生活中的表示和运算方法不同,因此理解也较为困难。
纵观近几年的真题,不难发现unsigned、short、int、long、float、double等在==C语言中的表示、运算、溢出判断、隐式类型转换、强制类型转换、IEEE754浮点数的表示,
以及浮点数的运算,都是考研考查的重点,需要牢固掌握。
1: Number system and coding
1. The carry count system and its mutual conversion
【B means】Binary | Every 2 into 1 | Use two Arabic numerals: 0, 1 | |
[O means] octal | Every 8 into 1 | Use eight Arabic numerals: 0, 1, 2, 3, 4, 5, 6, 7 | A writing form of binary, the 3-digit number of binary is encoded as a group is the octal number (3-bit binary maximum is 7) |
[D means] Decimal | 1 every 10 | Use ten Arabic numerals: 0 to 9 | |
[The beginning of OX/ H ending means] hexadecimal |
1 every 16 | But we only have ten numbers from 0 to 9, we use the six letters A, B, C, D, E, F to represent 10, 11, 12, 13, 14, 15 respectively The letters are not case sensitive |
The 4-digit binary number is coded as a group is the hexadecimal number (4-digit binary maximum is 15) |
Features: Every X is followed by one (X system) Bit weight: 128 64 32 16 8 4 2 1 0.5 0.25 0.125 |
base conversion | |
Convert binary to octal/hexadecimal | Just group the 3/4 bits of the binary into a group |
Convert Octal to Hexadecimal | Convert to binary first |
Convert any base to decimal | Multiply the weight by the arbitrary base number, and then add the products together |
Convert decimal to arbitrary base | Integer part: remainder by division |
Fractional part: any binary decimal can be expressed in decimal, But not every decimal fraction can be represented in binary (like 0.3) |
Extension: Online base conversion
Online Tool : Hexadecimal Conversion - Online Tool
Online Binary Converter: Online Binary Converter Converter Network
Query Network: Online Hex Conversion-China Query Network
C online tool: online hex conversion
tool: online hex conversion
2. The truth value and the number of machines
真值:符合人类习惯的数字,带符号的如-1,2,-3,4
机器数:数字实际存到机器里的形式,正负号需要被“数字化”,常用最高位0表示正1表示负
3. BCD code
BCD : Binarv-Coded Decimal, decimal coded in binary
1.8421码(最常用) 注意∶如果两个8421码相加后的和小于9(10进制), 8421码中1010~1111(10~15)没有定义,需要加(0110)6 (10进制)进行修正 若两个8421码相加之后的值小于等于1001或者9时不需要修正 如果值大于1001或者9时需要进行修正,将所得的值加0110进行修正(原因:用4位二进制数表示一位十进制数必定有6个状态冗余) 2.余3码(无权码) 在8421码的基础上加3(0011),因为每个数都多3,所以称为余3码 如 8——>1000(8421码)——>1011(余三码) 3.2421码(有权码) 权值由高到低为2,4,2,1 >=5的4位二进制数中最高位为1 ,<5的最高位为0 如:5——>1011而非0101
8421 code: fixed right code
The remaining 3 codes: Unfixed and unauthorized codes
2421 code: fixed right code
4. Characters and Strings
C language - ASCII code table and classification
1.字符串编码ASCII码(最常用的):7位二进制编码 2.汉字的表示和编码:每个编码用两个字节表示 GB 2312-80:汉字+各种符号共7445个94*94 区位码+32(2020H){防止信息交换时与“控制/通信字符”冲突}——>国标码+8080H{保证高位为1,与ASCLL码区分}——>汉字内码(机内码) 种类 输入编码:计算机输入 汉字内码:计算机内部处理 汉字字形码:计算机输出 3.字符串存放 小端模式:将数据的最高有效字节存放在高地址单元中 大端模式:将数据的最高有效字节存放在低地址单元中 4.从低地址到高地址逐个字符存储,常采用'\0=0000 0000 = 0OH'作为结尾标志
5. Parity code
1.概念︰能够发现或者自动纠错的数据编码
码字:由若干位代码组成的一个字
两个码字间的距离:将两个码字逐位进行对比,具有不同的位的个数
码距:一种编码方案可能有若干个合法码字,各合法码字间的最小距离
当d=1时,无检错能力;当d=2时,有检错能力;当d>3时,若设计合理,可能具有检错、纠错能力
2.原理:通过添加一些冗余码,实现检验或者纠错编码
3.分类
3.1 奇偶校验码
码距:2
概念:在原码加上一个校验位,它的码距位2,可以检测出一位错误
奇校验码∶有效信息位和校验位中1的个数为奇数
偶校验码∶有效信息位和校验位中1的个数为偶数
但是如果编码中出现偶数位错误,无法检测
缺点:具有局限性、==奇偶校验码只能发现奇数为的出错情况==但不能纠错
给出两个编码1001101和1010111的奇偶校验码
1001101 奇校验 11001101 偶校验 01001101
1010111 奇校验 01010111 偶校验 11010111
3.2 海明码
它实际上是一种多重奇偶校验码
在有效信息位中添加几个校验码形成海明码不仅可以发现错位,还可以对错位进行纠错
需要多少个校验位?
信息位n个 校验位k个(所以有2^k种状态);信息位+校验位=n+k位(其中任何一位都可能出错) 至少有1种状态,所以有2^k>=n+k+1个
编码最小码距L越大,检测位数越多,纠错能力越强(纠错能力恒小于等于检测能力) 先检错,才能纠错
补充
海明码有1位纠错,2位检错能力
为了区分1位错和2位错,还需添加"全校验位"对整体进行偶校验注意︰有的题目位置编号可能是从小到大的,但处理方法雷同
3.3 CRC(循环冗余码)
常用于大量的数据传送时的校验
接收到循环冗余码后,对生成多项式做模2除法,余数为0则无错误,余数不为0,对相应位置取反
检错、纠错能力
可检测出所有奇数个错误;可检测出所有双比特的错误
可检测出所有小于等于校验位长度的连续错误
若选择合适的生成多项式,且2^R≥K+R+1,则可纠正1位错
理论上可以证明循环冗余校验码的检错能力有以下特点:
1)可检测出所有奇数个错误;
2)可检测出所有双比特的错误;
3)可检测出所有小于等于校验位长度的连续错误;
5.1 Hamming code solution steps
The relationship between information bit m and check bit k
The Hamming code bit Pi check digit should be placed at the position of 2^ (i-1)
full check digit
5.2 CRC (Cyclic Redundancy Code) solution steps [computer network is also involved]
Two: Fixed point number
1. Representation of fixed-point numbers
The position of the decimal point is fixed Eg: 996.007—regular counting
1.真值零表示方式 1.1 两种表示法 原码表示法:正零00000负零10000 反码表示法:正零00000负零11111 1.2 唯一表示 补码对真值零表示是唯一的 移码对真值零也是唯一的 补码和移码可以多表示一个负数 2.有符号与无符号 2.1 无符号数:整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值 通常只有无符号的整数,而没有无符号的小数 n位的无符号数表示范围为:0 ~ 2n -1 2.2 有符号数∶最高位的0/1分别表示正/负 定点整数和定点小数 3.机器数定点表示 定点小数定义∶定点小数是纯小数,约定小数点位置在符号位之后、有效数值部分最高位之前 定点整数定义:定点整数是纯整数,小数点位置在有效数值部分的最低位之后 4.机器数表示方法(有符号数):符号位+数值部分/尾数+小数点位置(隐含) 4.1 原码表示法 最高位为符号,其余各位为表示数的绝对值,符号位“0/1”对应“正/负” 纯小数的原码:字长为n+1,范围为-(1-2^(-n))<= x <=1-2^(-n),关于原点对称 纯整数的原码:字长为n+1,范围为-(2^n-1) <= X <=( 2^n-1),关于原点对称 4.2 反码表示法 原码与补码相互转化的过渡 若符号位为0,则反码与原码相同;若符号位为1,则数值位全部取反 纯小数反码:表示范围:-(1-2^(-n)) <= X <= 1-2^(-n),关于原点对称 4.3 补码表示法 由于原码表示中加减法计算复杂,补码表示法可以更好地去表示加减法 正数的补码=原码;负数的补码=反码末位+1(要考虑进位) 纯小数补码:表示范围-1<=X<=1-2^(-n),比原码多表示-1 纯整数补码:表示范围-2^n <= X<=2^n-1,比原码多-2^n 补码的算数移位: 实现除法功能:符号位与数值位一起右移,保持原符号位数值不变 变形补码(模4补码)正:00,负:11 纯整数反码:表示范围:-(2^n-1 ) <= x <= 2^n-1,关于原点对称 4.4 移码表示法 常用来表示浮点数的阶码,只能表示整数 补码的基础上将符号位取反 最小值-2^n(全0),最大值2^n-1(全1) 移码大:真值就大
1.原码:很符合我们对二进制数的理解
减法运算要使用专门的减法器,会导致硬件的成本上升
2.补码的作用:使用补码可将减法操作转变光等价的加法
ALU中无需集成减法器。
执行加法操作时,符号位一起参与运算
模-a的绝对值=a的补数
3.移码的作用:方便对比大小
4.反码:只是原码转变成补码的一个中间状态
2. Operations on fixed-point numbers
Shift operations and addition and subtraction operations (high frequency of investigation), multiplication and division operations
2.1 Shift operation
1.算数移位 符号位不参与运算 注意:由于原、反、补码位数有限,因此某些时候算数移位不能精确等效乘法、除法(散失精度) 1.1 原码:符号位保持不变,仅对数值位进行移位 右移:高位补0,低位舍弃。若舍弃的位=0,则相当于/2;若舍弃的位!=0,则会丢失精度 左移:低位补0,高位舍弃。若舍弃的位=O,则相当于×2;若舍弃的位A0,则会出现严重误差 1.2 反码: 正数的反码与原码相同,因此对正数反码的移位运算也和原码相同 右移:高位补0,低位舍弃;左移:低位补0,高位舍弃 负数的反码粉值与原码相反 右移高位补1,低位舍弃左移:低位补1,高位舍弃 1.3 补码: 正数的补码与原码相同,因此对正数补码的移位运算也和原码相同 右移:高位补0,低位舍弃左移:低位补0,高位舍弃 负数补码=反码末位+1导致反码最右边几个连续的1都因进位而变为0,直到进位碰到第一个0为止,最右边的1及其右边同原码。最右边的1的左边同反码 右移(同反码):高位补1,低位舍弃左移(同原码):低位补0,高位舍弃 2.逻辑移位:将操作数看做无符号数,左移或者右移都要添零 逻辑右移:高位补0,低位舍弃;逻辑左移:低位补0,高位舍弃 3.循环移位:带进位标志位的循环移位;不带进位标志位的移位的循环移位 不带进位位:用移出的位补上空缺 带进位位:移出的位放到进位位,原进位位补上空缺
Arithmetic shift
2.2 Addition and Subtraction
1.原码的加减法运算 1.1. 加法准则: 符号相同:绝对值相加,符号不变 符号不同:绝对值大的减去绝对值小的符号去绝对值大的数 1.2 减法准则: 减数的符号取反、将其与被减数做原码加法运算 正-负→正+正 负-正→负+负 正-正→正+负 负+正→负-负 2.补码加减法运算 总是要转变成加法,符号位参与运算码 负数补→原:①数值位取反+1;②负数补码中,最右边的1及其右边同原码。最右边的1的左边同反码 3.溢出概念和判别方法(-128~127) 上溢:大于最大可以表示正数(正+正=负) 下溢:小于最小可以表示的负数(负+负=正) 补码判断溢出方法: 一位符号位(模2补码) ︰参加运算的两个数的符号相同,但是结果符号出现变化,则结果溢出 一位符号位根据数据位进位判断,符号位进位与最高位进位相同,则无溢出 双符号位(模4补码) :00正数 无溢出;01 正溢出;10 负溢出;11 负数无溢出 4.符号扩展 4.1 正数:在原有的基础上,添零凑位数即可(原、反、补码的表示都一样) 整数:符号位和数值位中间插入0 小数:尾部添加0 4.2 负数 4.2.1 整数: 原码:加0处理 反码:加1处理 补码:加1处理(最右边第一个1,1的左边和反码一致,右边取反) 4.2.2 小数: 原码:末尾添加0 反码:末尾添加1 补码:末尾添加0(最右边第一个1,1的左边和反码一致,右边取反)
2.3 Multiplication and division operations
1.乘法运算:移位方向向右,次数n,每位次数1 1.1 原码位乘法: 符号位:由两个数的符号位异或 数值:两个数的绝对值相乘之积 符号不参与运算 逻辑右移 部分积2位 乘数О位 累加次数n MQ中最低位=1时,(ACC)+[|x|]原 MQ中最低位=0时,(ACC)+0 1.2 补码位乘法: 符号位参与运算 算术右移 部分积2位 乘数1位 累加次数n+1 辅助位-MQ中最低位=1时,(ACC)+[x]补 辅助位-MQ中最低位=0时,(ACC)+0 辅助位-MQ中最低位=-1时,(ACC)+[-x]补 2.除法运算:移位方向向左,次数n 2.1 原码除法运算:被除数-|除数|=新余数 不恢复余数法(加减交替法):当余数为负时商0,并左移,再+|除数| 符号位不参与运算 恢复余数法:当余数为负时商0,并+|除教|,再左移,再-|除数| 2.2 补码除法运算(加减交替法) 符号位参与运算 被除数/余数、除数采用双符号位 被除数和除数同号,则被除数减去除数;异号则被除数加上除数。 余数和除数同号,商1,余数左移一位减去除数;余数和除数异号,商0,余数左移一位加上除数。重复n次 末尾商恒置为1,其精度误差不超过2^-n 3.强制类型转换 将所给数字写为二进制,然后按照转换成不同的码的规则进行读出 长整数变短整数:高位截断,保留低位 短整数变长整数:符号扩展 C语言中定点整数是用“补码”存储的
division operation
Three: floating point numbers
1. Representation of floating point numbers
The position of the decimal point is not fixed Eg: 9.96007*102——Scientific notation
1.表示格式 阶码:是整数,阶符与阶码的位数共同反映浮点数的表示范围与小数点的实际位置 数符:表示浮点数的符号 尾数:位数表示浮点数的精度 尾数的最高数值位必须是一个有效值(类比十进制科学计数法,通常我们会让数值部分最高位为非0) 真值=r^E*M 2.规格化浮点数:左规可以多次,右规只能一次 左规:数值位最高位无效时,通过尾数算数左移、阶码减1的方法处理,直到尾数最高数值位有效时停止 右规︰若采用双符号位表示尾数,则当运算后尾数“假溢出”时,可以通过尾数右移、阶码加1的方法处理 3.尾数进行规格化: 3.1 原码规格化:正数:0.1XXX;负数:1.1XXX 尾数的最高数值位必须是1 基数:4原码规格化形式的尾数最高2位不全为0 基数:8原码规格化形式尾数最高3位不全为0 3.2 补码规格化:正数:0.1XXX;负数:1.0XXXX 尾数最高数值位必须和尾数符号位相反 4.浮点数标准IEEE754(移码=真值+偏置值) 4.1 整数部分隐含1 短浮点数(组成位数) 偏置值:7fh (16进制) 127(十进制) 数符:1 阶码8 尾数数值:23 总位数:32 长浮点数(组成位数) 偏置值: 3ffh ( 16进制)1023(十进制) 数符∶1 阶码11 尾数数值52 总位数:64 4.2 临时浮点数(组成位数) 偏置值: 3fffh ( 16进制)16383(十进制) 数符∶1 阶码15 尾数数值:64 总位数:80 4.3 浮点数范围 单精度浮点数:2^(-126 ) ~2^(127)*(2-2^(-23)) 双精度浮点数:2^(-1022)~2^(1023)*(2-2^(-52)) 5.定点数与浮点数的区别 相同字长,浮点数范围更大 浮点数精度降低 浮点数运算复杂 浮点数只有规格化后阶码超出表示范围,才发生溢出
2. Addition and subtraction of floating point numbers
1.运算步骤 1.1 对阶∶小阶看齐大阶,阶码小的尾数右移一位,阶加一,直到阶码相等 注:对阶可能导致丢失未位精度 1.2 尾数求和:尾数按照定点数加减规则运算 通常采用双符号位表示尾数,这样可以挽救尾数溢出 1.3 规格化: 最高数值位与符号位不同即为规格化形式 左规︰尾数左移1位,和的阶码减1 直到00.1XX或者11.0XXX 右规,尾数求和结果溢出(10.XXX或者01.xXX)尾数右移一位,和的阶码加1 1.4 舍入: 0舍1入法:可能会导致溢出,此时需要再一次右规 尾数右移时,移去的最高数值位为0,则舍去 尾数左移时,移去的最高数值位为1,则尾数末位加1 恒置1法:尾数右移,不论最高数值位丢掉的是1还是0,都将尾数末位恒置为1 1.5 溢出判断 只有右规后,仍然溢出,此时才是真正溢出 上溢出:进入中断处理 下溢出︰按机器零处理 2.强制类型转换 2.1 无损: char->int—>long->double float—->double 2.2 有损: int—>float 可能会损失精度(float尾数的数值位有1+23位) float->int 可能会溢出,也可能会损失精度(如小数转整数) 3.边界对齐 现代计算机通常是按字节编址,即每个字节对应1个地址 通常也支持按字、按半字、按字节寻址
Four: Arithmetic logic unit ALU
1.运算器组成:算术逻辑单元、累加器、状态寄存器、通用寄存器组 2.串行加法器和并行加法器 2.1 一位全加器:两个加数输入,以及低位进入输入;本位结果和进位输出 2.2 串行加法器: 只有一个全加器,数据逐位的送入加法器中运算,逐位送回寄存器 操作数n位则进行n次 成本低,但是速度慢 2.3 并行加法器:提高并行加法器速度的关键在于加快进位产生和传递速度 多个加法器共同组成,每个全加器都有一个低位送来的进位输入,向高位的进位输出 进位方式 串行进位:将全加器串接在一起,每级进位依赖于前一级进位 并行进位:同时进位,各级进位信号同时形成 3.算术逻辑单元的功能和结构 ALU:算数运算与逻辑运算、辅助功能(移位、求补等) 基本结构:输入、输出、控制 4.电路的基本知识 逻辑运算:与、或、非、与非、或非、异或、同或 门电路:最基础的逻辑元件,用于实现逻辑运算 逻辑表达式就是电路的数学化表示。根据逻辑运算的规则对逻辑表达式进行优化.也就是在优化电路
logical