我是靠谱客的博主 无限小熊猫,最近开发中收集的这篇文章主要介绍计组——溢出判断方法一:采用一位符号位方法二:采用双符号位补充:符号扩展,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

当两个符号相同的数相加或两个符号相异的数相减才可能产生溢出。
【例】设机器字长为8位(含一位符号位),A=15,B=-24,C=124,求[A+C]和[B-C]
【分析】
[A+C]=00001111+01111100=10001011(真值-117)
[B-C]=[B]+[-C]=11101000+10000100=01101100 (真值+108)

方法一:采用一位符号位

对于A,B两个操作数:
在这里插入图片描述

针对上式——逻辑表达式
:如ABC,表示A与B与C(类似于&&)当且仅当A、B、C均为1时,ABC为1
:如A+B+C,表示A或B或C(类似于||)A、B、C中有一个或多个为1,则A+B+C=1
:如 A ‾ overline{A} A,表示取反
在计算机中用硬件电路实现,方便进行溢出判断

☆也可根据数据位进位情况判断溢出

符号位的进位 C s C_s Cs最高数值位的进位 C 1 C_1 C1
上溢01
下溢10

上例[A+C]的计算结果可知, C s = 0 C_s=0 Cs=0 C 1 = 1 C_1=1 C1=1,发生了上溢;[B-C] C s = 1 C_s=1 Cs=1 C 1 = 0 C_1=0 C1=0,发生了下溢
C s C_s Cs C 1 C_1 C1不同时发生溢出,逻辑判断表达式 V = C s ⊕ C 1 V=C_s oplus C_1 V=CsC1,若V=0,表示无溢出;V=1,表示有溢出

方法二:采用双符号位

正数符号为00,负数符号为11
[A+C]=000001111+001111100=010001011(上溢)
[B-C]=111101000+110000100=101101100 (下溢)
结果中更高的符号位表示本该得到的正确的结果,第2个符号位表示实际得到的结果
用硬件判断溢出时,记两个符号位 C s 1 C s 2 C_{s1}C_{s2} Cs1Cs2,则 V = C s 1 ⊕ C s 2 V=C_{s1} oplus C_{s2} V=Cs1Cs2
若V=0,表示无溢出;若V=1,表示有溢出。

实际存储时只存储1个符号位,运算时会复制一个符号位

补充:符号扩展

通过符号扩展,可以在一定程度上避免溢出
int -> long
8位 -> 16位
正整数(原、反、补的表示一样)数值位前面直接添补0
负整数:在原符号位和数值位中间添补,原码添0,反码、补码都添1

正小数(原、反、补的表示一样)在尾部添0
负小数:原码在尾部添0,反码在尾部添1,补码在尾部添0

最后

以上就是无限小熊猫为你收集整理的计组——溢出判断方法一:采用一位符号位方法二:采用双符号位补充:符号扩展的全部内容,希望文章能够帮你解决计组——溢出判断方法一:采用一位符号位方法二:采用双符号位补充:符号扩展所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部