导图社区 ②数据的表示和运算
24自用408计算机组成原理,分享了数制与编码、运算方法和运算电路、浮点数的表示与运算的知识,欢迎大家学习。
编辑于2023-07-03 15:48:59 广东数据的表示和运算
数制与编码
进位计数制及其相互转换
进位计数法
十进制
decimlism
1652D
八进制
十六进制
hexadecimal
1652H
Ox1652
相互转换
二进制转八或十六
高位补0
十进制转二进制
整数部分除基取余法 从低到高
小数部分乘基取整法 从高到低
任何一个二进制小数都可以用十进制表示,而十进制不一定能用二进制表示
真值和机器数
机器数0表示正,1表示负
定点数的编码表示
原码
小数表示范围
整数表示范围
零有正零和负零两种形式
反码
补码
小数表示范围
整数表示范围
零的表示唯一
变形补码
双符号位
00表示正
11表示负
移码
补码的基础上将符号位取反
特点
移只能用于表示整数
移码全0时,对应真值最小值-2'n
移码全1时,对应真值的最大值2'n-1
零的表示唯一
移码大真值就大,移码小真值就小
总结
正数
原码、补码和反码相同
移码与补码符号位相反
负数
原码按数值位取反,末位加1得补码
技巧:从右往左找到第一个1,这个1左边的所有数值位取反
补码正负转换,全部按位取反,末位加1
技巧:从右往左找到第一个1,这个1左边全部按位取反
对称性
原码和反码关于数轴对称,都存在+0和-0
补码和移码不对称,零表示唯一,比反码原码多一个数
大小
原码很容易判断大小
负数的反码、补码很难直接判断大小
整数表示
无符号整数
默认为正
用于地址运算,指针等
带符号整数
多用补码表示,方便计算
运算方法和运算电路
基本运算部件
运算器组成:算术逻辑单元 累加器 状态寄存器 通用寄存器组
一位全加器
和的表达式
进位表达式
串行进位加法器
n个全加器相连
每级进位直接依赖于前一级的进位,即进位信号是逐级形成的
位数越多,延迟越高,加快进位产生和提高传递速度是关键
并行进位加法器
从全加器的进位表达式的公式递推得,Ci仅与Ai、Bi和C0(最低进位)有关,相互之间的进位无依赖关系
同时进位,各级进位信息同时形成
成本高
带标志加法器
算术逻辑单元(ALU)
算术运算和逻辑运算
组合逻辑电路
定点数的移位运算
算术移位
正数
空位补0
负数
原码
补0
补码
左移添0
右移添1
反码
补1
符号位不参与运算
逻辑移位
将操作数视为无符号数
规则
空位补0,溢出丢掉
循环移位
移出的数位又被移入数据中
带标志位CF
左移
数据的最高位进入CF
CF进入数据的最低位
右移
数据的最低位进入CF
CF进入数据的最高位
不带标志位CF
左移
数据的最高位分别进入CF和最低位
右移
数据的最低位分别进入CF和最高位
适合将数据的低字节数据和高字节数据互换
定点数的加减运算
补码的加减法运算
符号位与数值位同时参与运算,符号位的进位丢掉,结果的符号由运算得出
运算结果仍然是补码
补码加减法运算电路
零标志ZF
1表示结果为0
符号标志SF
表示有符号整数加减运算结果符号
结果的最高位
当OF=1时,符号位也可能是错误的
溢出标志OF
OF=1表示有符号整数加减溢出
进/借位标志CF
表示无符号整数加减是否发生了进/借位
CF=1表示无符号整数运算溢出
对有符号运算,CF无意义
sub控制器(X+Y)
1
减法
取Y的反+sub一起进入加法器
0
加法
取Y+sub一起进入加法器
溢出判别方法
一位符号位
参加运算的两个数符号相同,但结果符号出现变化,则结果溢出
双符号位 模4补码
00
正数 无溢出
01
正溢出
10
负溢出
11
负数 无溢出
一位符号位根据数据位进位判断
符号位进位与最高位进位相同,则无溢出,否则发生溢出
原码加减法运算
加法准则
符号相同
绝对值相加,符号不变
符号不同
绝对值大的减去绝对值小的,符号取绝对值大的
减法准则
减数的符号取反
将其与被减数做原码加法运算
定点数的乘除运算
定点数的乘法运算
原码一位乘法
符号位
两个数的符号位异或
数值
两个数的绝对值相乘之积
累加次数n
向右移位(逻辑右移),移位次数n,每次1位
结果取绝对值再加符号位
例子
补码一位乘法
符号位参与运算
部分积取双符号位,乘数取单符号位
移位规则
辅助位-最低位=1
+[x补] 右移
辅助位-最低位=0
右移
辅助位-最低位=-1
+[-x补 ] 右移
右移是算术右移
符号位不动,数值位右移
正数右移补0,负数右移补1
标注符号位是啥就补啥
n+1次累加,n次右移
例子
定点数的乘法运算
原码除法运算 不恢复余数法
符号位
两个数的符号位异或
数值
两个数的绝对值相除
规则
余数为正
商1,余数和商左移一位,再减去除数
余数为负
商0,余数和商左移一位,再加上除数
当最后一步(n+1)余数为负时,需恢复余数,加上除数
累加次数n+1,左移n次
例子
补码除法运算 加减交替法
符号位参与运算
规则
起始
被除数与除数
同号
被除数-除数
异号
被除数+除数
余数与除数
同号
商1,余数左移一位减去除数
异号
商0,余数左移一位加上除数
最后一步商恒置为1
n+1次加减,n次左移
例子
C语言中的整数类型及类型转换
有符号数和无符号数的转换
仅改变解释方式,位值不变
不同字长整数之间的转换
大字长变量向小字长变量转换
把多余的高位部分直接截断,低位直接赋值
小字长变量向大字长变量转换
无符号整数
高位0扩展
符号扩展
正数
扩展位用0补充
负数
原码
扩展位用0补充
补码
整数
补1
小数
补0
数据的存储和排列
大端方式
从最高有效字节到最低有效字节的顺序存储数据结构 高位在前
小端方式
从最低有效字节到最高有效字节的顺序存储数据结构 低位在前
边界对齐的方式排列
空间换时间
指令系统计算机RISC通常采用边对齐方式
浮点数的表示与运算
浮点数的表示
表示格式
数符决定浮点数的符号
尾数表示浮点数的精度
阶码表示浮点数的表示范围
浮点数规格化
左规
右规
原码
0.1xxxxx
max
0.1111....
1-2'(-n)
min
0.1000....
1/2
1.1xxxxx
max
1.1000....
-1/2
min
1.1111....
-(1-2′(-n))
补码
0.1xxxxx
max
0.1111....
1-2'(-n)
min
0.1000....
1/2
1.0xxxxx
max
1.0111....
-1/2-2′(-n)
max
1.0000....
-1
IEEE 754
移码=真值+偏置值
偏置值取
常用浮点数格式
32位单精度
1 8 23
64位双精度
1 11 52
临时浮点数
1 15 64
例
浮点数范围
特殊
阶码全为0,尾数全为0,表示±0
阶码全为0,尾数M不全为0,表示非规格化小数
阶码全为1,尾数全为0,表示±∞
阶码全为1,尾数M不全为0,表示非数值如0/0,∞-∞
定点数与浮点数区别
1| 浮点数范围更大
2| 浮点数精度更低
3| 浮点数运算复杂
4| 浮点数只有规格化后阶码超出所能表示的范围时,才发生溢出
浮点数的计算
对阶
小阶向大阶看起,将阶码小的尾数右移至阶码相等为止
右移时,会丢失精度
尾数求和
规格化
舍入
0舍1入法
舍去位为1
末位+1
舍去位为0
直接舍去
恒置1法
舍去中有1,就把末位置1
截断法
直接丢弃
溢出判断
阶码上溢
抛出异常(中断)
阶码下溢
当作机器数零0
溢出判断是对阶码的,尾数不会溢出,尾数溢出可通过阶码来调整
例
C语言中的浮点数类型
char→int→long→double和float→double
精度和范围从小到大,转换无损
int→float
不会溢出,但在int的24-31不为0时,会发生舍入,影响精度
double→float
可能发生溢出,舍入
float或double→int
舍去小数部分,只保留整数部分
几个问题
无符号数/有符号数补码的加减运算问题
运算方法
加法
减法
被减数+将减数全部取反+1
电路逻辑
乘除法问题
流程,移动次数,累加次数,移动规则
具体求值,手算即可
溢出问题
加减法
无符号数
关注CF
CF为1,则溢出
有符号数
关注OF
OF为1,则溢出
对于具体方法
乘法
n位乘n位,若用2n位保存乘积,则不会溢出
只保留末尾n位,可能会溢出
手算判溢出
机器判溢出
无符号数
2n位中,仅当前n位都为0时无溢出
有符号数
2n位中,仅当前n+1位都为0或1时无溢出
除法整数无溢出,浮点数不考
精度问题
比较转换两个类型的尾数的位数
浮点数的尾数的位数
32单精度float:23+1bit
64双精度double:52+1bit
80长双精度(临时浮点数)long double:64+1bit
定点数的尾数的位数
16位short型:数值部分15bit
32位int型:数值部分31bit
32位unsigned int型:数值部分32bit
64位long型:数值部分63bit