卡盟网站怎么做,数商云招聘,京东联盟新手没有网站怎么做推广,网站的动画效果代码文章目录 大纲2.1 数制与编码2.2 运算方法和运算电路2.3 浮点数的表示和运算 【※】带标志加法器OFSFZFCF计算机怎么区分有符号数无符号数? 【※】存储排列和数据类型转换数据类型大小数据类型转换 进位计数制进制转换2的次幂 各种码的基本特性无符号整数的表示和运算带符号整… 文章目录 大纲2.1 数制与编码2.2 运算方法和运算电路2.3 浮点数的表示和运算 【※】带标志加法器OFSFZFCF计算机怎么区分有符号数无符号数? 【※】存储排列和数据类型转换数据类型大小数据类型转换 进位计数制进制转换2的次幂 各种码的基本特性无符号整数的表示和运算带符号整数的表示和运算码之间的转换移位运算算数移位【针对有符号数】逻辑移位【针对无符号数】循环移位 乘除运算无符号整数有符号数 【※】IEEE754IEEE754浮点数与真值相互转化由浮点数确定真值(阶码不是全0、也不是全1) : 浮点数的加减运算 C强制类型转换浮点数的规格化 大纲
2.1 数制与编码
王道书和大学教材讲到原码、补码时使用了数学化的语言来讲解不用过于深究不是重点。计组这门课在考试中只考察应用不考数学原理。对补码的数学原理感兴趣的同学可以研究《数论》。这个小节学起来难但做起题来不算难。不建议反复死磕视频和王道书可以先学一遍然后直接做题用“做题驱动复习”。
2.2 运算方法和运算电路
本节内容较多一天的时间可能学不完。建议大家按照“伴学营打卡表”推荐的顺序做题学一部分做几道题。不建议一口气全部看完再去做题那样一定消化不了。对于没学过《数字电路》的同学串行加法器、并行加法器的底层原理一定很难理解。不过没关系考试不可能考太底层的电路设计。带标志位的加法器是考试重点也是经常结合第四章考察的重点需要认真理解。OF、SF、ZF、CF 标志位的生成和作用一定要掌握。乘法、除法的原理细节不容易理解但考察频率较低第一次学如果觉得难也不建议花太多时间。只需要先建立起这个认知在计算机硬件层面无论是乘法还是除法都是通过 加法、减法、移位运算 来实现的。C语言中各种数据类型的存储和相互转换、数据的存储和排列这两部分内容很重要经常结合大题考察需认真理解。
2.3 浮点数的表示和运算
本节又是一块硬骨头没什么好说的学吧。第一次学难免让人怀疑人生保持平常心尽力去学尽力去做题就好。第一次学习不建议死磕细节得配合做题来体会这个部分怎么考用“做题驱动复习”。但很多同学的反馈是“第一次学感觉很复杂但第二轮回来复习感觉也没那么难”。原因是本节内容虽难但在经过做题训练之后大家都会更清晰的认识到 “哪些地方是考试重点”、““哪些地方应该是我重点关注的”。
【※】带标志加法器
OF
有符号数的加减运算是否发生了溢出。OF1时说明发生了溢出OF最高位产生的进位 ⊕ 次高位产生的进位OF位对无符号数的加减法无意义
SF
有符号数加减运算结果的正负性。SF0表示运算结果为正数SF1表示运算结果为负数SF 最高位的本位和也是结果的最高位SF位对无符号数的加减法无意义
ZF
表示运算结果是否为0。ZF1表示运算结果为0ZF0表示运算结果非0两个数的运算结果为n bit只有n bit全为0时ZF 1对有符号、无符号都有意义
CF 进位、借位标志 表示无符号数的加减法是否发生了进位或借位 当CF1时说明无符号数的加减法发生了进位或借位即发生了溢出 CF最高位产生的进位⊕sub sub1表示减法sub0表示加法 CF位对有符号数的加减法无意义 有符号数的加减运算是否发生了溢出。 OF1时说明发生了溢出 OF最高位产生的进位 ⊕ 次高位产生的进位 OF位对无符号数的加减法无意义
计算机怎么区分有符号数无符号数?
标志位会保存在PSWALU无法区分有符号数和无符号数但由于计算机分为无符号加法和有符号加法。指令不同执行时安排的微操作不同从而区分有符号数和无符号数。
【※】存储排列和数据类型转换
数据类型大小
char1Bshort2Bint4Bfloat4Blong4Bdouble8B
Tips:
C语言中定点整数是用补码存储的
数据类型转换
整数之间转换带符号和无符号之间
长度相同 机器数不变解释方式改变 短变长 先扩展 无符号数补0有符号数补符号 再解释 长变短 直接截断只留下低位再解释
整数与浮点数之间的转换
整数转浮点数 先转换为2进制写出科学记数法1.xxxx再转为浮点数截断尾部采用0舍1入的原则⚠️可能精度丢失 浮点数转整数 写出二进制小数去掉小数部分整数部分保留更低的位数⚠️可能溢出、精度丢失
进位计数制
进制转换
二进制 - 八进制每3个二进制位对应一个八进制位二进制 - 十六进制每4个二进制位对应一个十六进制位 【PS整数部分前面补0小数部分后面补0】 十进制 - 进制 整数部分:除基取余法先取得的“余”是整数的低位小数部分:乘基取整法先取得的“整”是小数的高位
2的次幂
次幂2的次幂-40.0625-30.125-20.25-10.501122438416532664712882569512101024112048124096138192141638415327681665536
各种码的基本特性 无符号整数的表示和运算
• 加法 • 全部位按位相加 • 减法 • x − y x [ − y ] x-yx[-y] x−yx[−y] • [ − y [−y [−y]是 [ y ] [y] [y]从右往左第一个1的左边全部取反 • 溢出 • 手算判断加减法的结果是否超出无符号数合法表示范围 • 机算 C F 最高位进位 ⊕ S u b CF 最高位进位 ⊕ Sub CF最高位进位⊕Sub
带符号整数的表示和运算
Tips • 计算机内部所有带符号整数的加减法都要先转换为补码
计算机硬件如何做带符号数补码的加法: • 从最低位开始所有位按位相加符号位参与运算并往更高位进位
计算机硬件如何做带符号数补码的减法: • 被减数”不变“减数”从右往左找到第一个1这个1左边的全部位按位取反减法变加法
有符号数 • 加法 • 按位相加 • 减法 • [ x ] 补 − [ y ] 补 [ x ] 补 [ − y ] 补 [x]_补 - [y]_补 [x]_补 [−y]_补 [x]补−[y]补[x]补[−y]补 • [ − y ] 补 是 [ y ] 补 [−y]_补 是 [y]_补 [−y]补是[y]补 从右往左第一个1的左边全部位按位取反 • 溢出 • 手算判断加减法的结果是否超出有符号数合法表示范围 • 机算 O F 最高位进位 ⊕ 次高位进位 OF 最高位进位 ⊕ 次高位进位 OF最高位进位⊕次高位进位
码之间的转换 [x]_移→[−x]_移全部位按位取反末位1使用补码表示时若符号位相同则数值位越大码值越大 [ x ] 原 → [ x ] 反 [x]_原→[x]_反 [x]原→[x]反 • 正数不变 • 负数符号位不变数值位按位取反 [ x ] 原 ↔ [ x ] 补 [x]_原↔[x]_补 [x]原↔[x]补 • 正数不变 • 负数符号位不变从右往左找到第一个“1”这个1左边的所有“数值位”按位取反 [ x ] 补 ↔ [ − x ] 补 [x]_补↔[−x]_补 [x]补↔[−x]补 • 从右往左找到第一个“1”这个1左边的全部位按位取反 [ x ] 补 ↔ [ x ] 移 [x]_补↔[x]_移 [x]补↔[x]移 • 符号位取反
如何用补码快速计算真值 - 直接在补码前面加上负号再计算值 ○ Eg [ 1110 ] 补 − 2 3 2 2 2 − 2 [1110]_补 −2^3 2^2 2 −2 [1110]补−23222−2 - 遇到一大串的1将其看作符号位直接化为最简再用上述方法 ○ Eg [ 11111110 ] 补 [ 10 ] 补 − 2 [11111110]_补 [10]_补 −2 [11111110]补[10]补−2
如何快速求真值的补码 eg − 8190 − 8192 2 [ 1110 , 0000 , 0000 , 0010 ] 补 E 002 H −8190 −8192 2 [1110,0000,0000,0010]_补 E002H −8190−81922[1110,0000,0000,0010]补E002H
移位运算
算数移位【针对有符号数】
左移1位相当于乘基数右移1位相当于除基数但由于位数有限所以有时候算数移位并不能完全等效于乘除运算。是针对有符号数符号位保持不变。 正数原码、反码、补码无论左移还是右移都是补0负数 原码左移、右移都补0反码左移和右移都补1补码左移补0右移补1 若采用双符号位来表示数则最高符号位永远是真正的符号位因此在算术移位时只有高符号位保留不变低符号位要参与移位
逻辑移位【针对无符号数】
针对无符号数。符号位参与左移、右移都补0移出的位舍弃
循环移位
不带进位位 用移出的位补上空缺 带进位位 移出的位放到进位位原进位位补上空缺
乘除运算
无符号整数
逻辑左移代替*2溢出判断 n位乘n位若用2n位保存乘积则不会溢出n位乘n位若用2n位保存中间结果最后截取末尾n位作为最终的乘积则可能溢出 当且仅当2n的前n位都是0时才不会溢出
有符号数
算术左移代替*2溢出判断 n位乘n位若用2n位保存乘积则不会溢出n位乘n位若用2n位保存中间结果最后截取末尾n位作为最终的乘积则可能溢出 当且仅当2n的前n1位是全0或全1时才不会溢出
【※】IEEE754 IEEE754浮点数与真值相互转化
由浮点数确定真值(阶码不是全0、也不是全1) :
划分“某浮点数”确定数符、阶码、尾数的分布确定尾数1.M(注意补充最高的隐含位1)确定 阶码的真值 移码 − 偏置值 阶码的真值 移码-偏置值 阶码的真值移码−偏置值 (可将移码看作无符号数用无符号数的值减去偏置值) ( − 1 ) s × 1. M × 2 ( E − 偏置值 ) (-1)^s × 1.M × 2^{(E - 偏置值)} (−1)s×1.M×2(E−偏置值)
浮点数的加减运算
对阶
目的使两个操作数的小数点位置对齐对阶操作只把较小的阶码调整到较大的阶码【所以不会引起阶码的上溢或下溢】阶码增大尾数右移无阶码减小的情况【因为只用小阶向大阶对齐】
尾数求和
原码定点数的加减法
规格化
尾数规格化为1.xxxx的形式
舍入
舍入是浮点数概念定点数无舍入浮点数舍入的情况对阶或者右规格化舍入不一定产生误差后几位为0时不产生误差
溢出
尾数右规阶码上溢发生溢出异常尾数左规阶码下溢当机器0处理如果双符号位为01或10时则溢出【第一个符号是真的符号】 10正溢01负溢 尾数舍入可能引起阶码的上溢尾数溢出时结果不一定溢出
C强制类型转换
无损 char→int→long→doublefloat→double 有损 int→float【可能会损失精度float 的尾数数值位只有123位】float→int 【可能会溢出也可能会损失精度如小数转整数】
浮点数的规格化
规格化规定尾数的最高数位必须是一个有效值(1)【即基数为2时要求尾数 1 / 2 ≤ ∣ M ∣ 1 1/2≤|M|1 1/2≤∣M∣1】采用规格化浮点数的目的是为了增加数据的表示精度负数补码的最高数值位是0就是一个规定不用纠结为什么补码表示的最高位与尾数的符号位不同时表示规格化了