欢迎光临散文网 会员登陆 & 注册

计算机组成原理学习记录2-数据的表示和运算

2023-07-20 22:21 作者:阿期777  | 我要投稿

数据的表示和运算

数制与编码

进位计数制及其相互转换

十进制、二进制、八进制、十六进制的相互转换

真值和机器数

真值

是指带“+”或“-”符号的数,是机器数代表的实际值。

机器数

是指把符号“数字化”的数,其表示形式有原码、补码、反码和移码。

无符号整数:全部二进制位都是数值位,没有符号位,第i位的位权是2的i-1次方。

n比特的无符号整数表示范围为0-2n-1,超出则溢出,意味着该计算机无法一次处理这么多。

可以表示的最小的数全0,可以表示的最大的数全1。

加法:从最低位开始,按位相加,并往更高位进位。

减法:被减数不变,减数全部位按位取反,末尾加一,减法变加法。从最低位开始,按位相加,并往最高位进位。

编码

BCD码

用四位二进制代码来表示一位10进制的数。最常见的是8421码

ASCII码

标准ASCII码采用7位二进制代码来表示通用控制字符、十进制数码、英文大小写字母和专用符号

汉字编码

包括输入编码、汉字内码和汉字字形码

校验码

奇偶校验码

在原编码上加上一个校验位,校验整个校验码中“1”的个数是否为奇数或者偶数

奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。校验位为0,否则为1

偶校验码:整个校验码(有效信息位和校验位)中“1”的个数位偶数。校验位为0,否则为1

偶校验的硬件实现:各信息进行异或(模二加)运算,得到的结果为偶校验位。异或是同0异1。

循环冗余(CRC)码

在M为信息后面再拼接N位的校验码,利用模2除法校验编码正确性

海明校验码

在信息字段中插入若干位数据,用于监督码字里哪一位数据发生了变化,具有一位纠错能力

定点数(带符号整数)

表示

原码

用机器数的最高位表示该数的符号,其余的各位表示该数的绝对值。符号位为0表示正数,符号位为1表示负数。

若机器字长n+1位,带符号整数的原码的表示范围:

真值0有两种形式,+0和-0,+0=0,0000000,-0=1,0000000

原码中符号位不能参与运算,需要设计复杂的硬件电路才能处理

用补码表示真值-符号位可以参与运算。

 

反码

正数和原码相同,负数为原码的每位求反(不包括符号位)

带符号整数的反码的表示范围:

补码

正数和原码相同,负数为反码的末位加1,即负数为原码的每位求反再加1(不包括符号位)

带符号整数的补码的表示范围:

补码加法:从最低位开始,按位相加(符号位参与运算),并往更高处进位。

移码

补码的符号位求反

移码只能用来表示整数,真值0只有一种形式

带符号整数的移码的表示范围:

原码和反码的合法表示范围完全相同,都有两种方法表示真值0

补码的合法表示范围比原码多一个负数,只有一种方法表示真值0

常见考点:两个数A和B进行某种运算后,是否发生溢出?

手算做题可以带入十进制验证,是否超出合法范围

 

运算

移位运算

原码和反码的加减乘除运算

真值《-》原码(0正1负)

原码《-》反码(正数相同,负数数值位取反)

原码《-》补码(正数相同,负数数值位取反,末尾加1)

反码《-》补码(正数相同,负数末尾加1)

[-x]补码《-》[x]补码(全部位按位取反,末尾加1)

补码《-》移码(符号位取反)

 

定点数(带符号小数)

表示

原码、反码、补码

运算

真值《-》原码(0正1负)

原码《-》反码(正数相同,负数数值位取反)

原码《-》补码(正数相同,负数数值位取反,末尾加1)

反码《-》补码(正数相同,负数末尾加1)

[-x]补码《-》[x]补码(全部位按位取反,末尾加1)

补码加减法运算方法

Nbit补码X+Y,按位相加即可

Nbit补码X-Y,将补码Y全部按位取反,末位+1,得到[-Y]补,减法变加法。

 

标志位生成

OF(溢出标志,溢出为1,否则为0)

计算方法:OF等于最高位产生的进位异或次高位产生的进位

OF对无符号的加减法无意义

SF(符号标志,结果为负号时为1,否则为0)

计算方法:SF=最高本位和

SF对无符号的加减法无意义

ZF(零标志,运算结果为0时,ZF置为1,否则置为0)

计算方法:两个数的运算结果为nbit,只有n位全为0时,ZF=1

CF(进位/借位标志,进位借位时为1,否则置为0)

计算方法:最高位产生的进位异或sub,sub=1表示减法,sub=0表示加法。

CF对有符号数无意义

移位运算

算数移位

原码:符号位不变,仅对数值位移位。右移:高位补0,低位舍弃。如果舍弃的位=0,则相当于/2,若不=0,则会丢失精度。左移:低位补0,高位舍弃。若舍弃的位=0,则相当于*2,若不=0,则会出现严重误差

反码:正数的反码与原码相同,正数反码的移位运算也和原码相同。负数的反码数值位与原码相反,因此负数反码的移位运算规则如下。右移:高位补1,低位舍弃。左移:低位补1,高位舍弃。

补码:正数的补码和原码相同,正数补码的移位运算也和原码相同。负数补码=反码末位+1。导致反码最右边几个连续的1都因进位而变为0,直到进位碰到第一个0为止。负数补码的算数移位规则如下:右移:高位补1,低位舍弃。左移,低位补0,高位舍弃。

逻辑移位

逻辑右移:高位补0,低位舍弃

逻辑左移:低位补0,高位舍弃

可以把逻辑移位看作是对无符号数的算数移位

循环移位

不带进位位:用溢出的位补上空缺

带进位位:移出的位放到进位位,原进位位补上空缺

两个定点小数进行加减法时,需要先转换为补码

定点小数补码的加法:从最低位开始,按位相加(符号位参与运算),并往更高位进位。

定点小数补码的减法:被减数不变,减数全部位按位取反,末位+1,减法变加法。从最低位开始,按位相加,并往更高位进位。

位拓展时,定点小数是在末尾添0,定点整数是在符号位后填0

小数补码加法和整数一样,从最低位开始,按位相加(符号位参与运算),并往更高位进位。

小数补码减法和整数一样,被减数不变,减数全部位按位取反,末尾加1,减法变加法。从最低位开始,按位相加,并往更高位进位。

 

强制类型转换

无符号数与有符号数:不改变数据内容,改变解释方式

长整数变短整数:高位截断,保留低位

短整数变长整数:符号扩展

 

数据的存储和排列方式

多字节数据在内存里一定是占连续的几个字节

01234567H中,最高有效字节(MSB)01,最低有效字节(LSB)67。

大端方式:01H 23H 45H 67H

小端方式:67H 45H 23H 01H

边界对齐

现代计算机通常按字节编址,每个字节对应一个地址。通常也支持按字、半字、字节寻址。设存储字长为32位,一个字=32bit,半字=16bit,每次访存只能读写1个字。

边界对齐方式中,访问一个字/半字都只需一次访存

边界不对齐方式中,访问一个字/半字可能要两次访存

浮点数

表示

组成

阶符、阶码(反映浮点数的表示范围)、数符和尾数(反映浮点数精度)

阶码反映了浮点数的表示范围和小数点的实际位置,尾数的数值部分的位数反映浮点数的精度。

阶符的运算相当于对尾数进行算数移位

规格化

规定尾数的最高数位必须是一个有效值

左规:尾数算数左移1位,阶码减1。直到尾数最高位是有效位。

右规:当浮点数运算的结果尾数出现溢出(双符号位为0或1)时,将尾数算数右移1位,阶码加1。

采用双符号位,当溢出发生时,可以挽救。更高的符号位是正确的符号位。

用原码的表示的尾数规格化:规格化的原码尾数,最高的数值位一定是1.正数时,最大值为0.1111...,最小值为0.100000.尾数的表示范围为1/2《M《。

负数时,最大值为1.100000.,最小值为1.1111111.尾数的表示范围为-()《M《-1/2。

用补码的表示的尾数规格化:规格化的补码尾数,符号位与最高位数值位一定相反。正数时,最大值为0.1111...,最小值为0.100000.尾数的表示范围为1/2《M《。

负数时,最大值为1.0111111.,最小值为1.000000.尾数的表示范围为-《M《-1/2+。

超出最大负数和最小正数,当作机器0,超出最大正数和负数,抛出上溢异常。

IEEE754标准

尾数用原码表示,阶码用移码表示

移码=真值+偏置值

偏置值一般取2n-1,此时移码=补码符号位取反

阶码真值=移码-偏移量

尾数部分隐含最高位1

短浮点数真值为

长浮点数真值为

单精度最小绝对值位E=1,M=0,最大绝对值E=254,M=1.11111

双精度最小绝对值位E=1,M=0,最大绝对值E=2046,M=1.11111

当阶码E全为0时,尾数不全为0时,表示非规格化小数。+-(0.xxxxxx)隐含最高位变为0,阶码真值固定位-126

阶码E全为0,尾数M全为0时,表示真值+-0

阶码E全为1,尾数M全为0时,表示无穷大

阶码E全为1,尾数M不全为0时,表示非数值“NAN”

 

运算

加减运算的步骤为对阶、尾数求和、规格化、舍入和溢出判断

加减运算

对阶:小阶向大阶看齐

尾数相加

规格化:出现类似0.00114514*10,需要左规,阶数-1.出现类似99.114514,需要右规,阶数+1.

舍入:若规定只能保留几位有效尾数,则进行舍入。舍入规则有多种,如直接砍掉,砍掉部分非0,则入1,四舍五入等。

判断溢出:若规定阶码不能超过2位,则运算后阶码超出范围,则溢出。尾数溢出未必导致整体溢出。

强制类型转换

无损:char-int-long-double、float-double

有损:int-float(可能损失进度,float尾数的数值位有1+23位)、float-int(可能会溢出,也可能损失精度,比如小数转整数)

Int范围为-,float的范围为

算数逻辑单元

一位全加器

最基本的加法单元,输入两位加数和地位的进位(三个输入),输出和以及高位的进位(两个输出)

本位和S=Ai异或Bi异或Ci-1

本位向高位的进位Ci=AiBi+(Ai异或Bi)Ci-1

串行加法器

只设一个全加器的加法器,串行进位

一位全加器+进位触发器,只能一位一位加

并行加法器

由若干个全加器构成,使用先行进位提高加法器的运算速度

计算速度取决于进位产生和传递的速度

串行进位的并行加法器,把n个全加器串接起来,就可进行两个n位数的相加。串行进位又称为行波进位,每一级进位直接依赖于前一级的进位,即进位信号是逐级形成的。

第i位向更高位的进位Ci可根据被加数,加数的第1-i位,再结合C0即可确认。

ALU

一种组合逻辑电路,能够进行多种算数运算和逻辑运算

基本逻辑运算:与和或

与:A·B

或:A+B

与非:

或非:

异或:A+B

非:


计算机组成原理学习记录2-数据的表示和运算的评论 (共 条)

分享到微博请遵守国家法律