首页 > 编程知识 正文

二进制减法器,二进制相加溢出怎么办

时间:2023-05-04 01:25:29 阅读:42997 作者:654

附注1 .溢出2 .实现二进制减法

一.溢出

在数学理论中,数字可以无限大,也可以无限小,但现实中计算机系统总是一个

因为是物理极限,所以不能表示无限大或无限小的数值。在计算机中,不管是什么样的数据类型,

有上限或下限

Python3中数据长度是动态的,理论上支持无限大的数量

可以使用sys.getsizeof ()函数来确定一个数字占用了多少字节。

如果某个数值超过限制值,就会溢出: 如果超过上限,则为上溢出(overflow); 如果超过下限,

下溢出(underflow)

示例:溢出

n位数字的最大正值是符号位为0,剩下的n-1位都为1,再大一个时符号位为1,剩下的n-1位都为1

n-1位均为0,即-2n-1。 也就是说,溢出后,从下限开始最大的数值加1就最小了

数值,重复,这就是剩余和建模的概念。

计算机溢出相当于取模。 用于获取类型的除数是数据类型的上限减去下限后的值加上1

即,(2n-1-1(-2n-1 )=2*2n-1-1 1=2n-1 1 )

也就是2n-1+1

这个除数不能直接写为2n。 因为2n已经是n 1位,已经超过了可以用n位表示的范围。

2.2进制减法的实现能用负数的原码直接减法吗?

例:3-2

可以看作3(-2 )

3的源代码是0011

-2的源代码为1010

0011 1010=1101

结果为-5,明显不符合3-2的差别。

假设有i-j可以转换计算机的减法。 其中,j是正数。 i-j加上取模除数,会发生溢出,且

正好可以得到我们想要的i-j的运算结果。

公式: i-j=(i-j)+(2n-1+1)=i+(无辜的水杯+1)=i+(无辜的水杯)+1

无辜的杯子,其中2n-1不考虑符号位,是n-1位的1

假设j=-2:

1111-0010=1101

从结果可知,无辜的杯子相当于正数j的二进制码,除了编码比特以外,每个比特取反(0变)

1,1为0 ),则负-j和正j原代码除符号位以外相同,因此无辜的杯子也相对于负-j

除二进制代码、符号位外,每位反.所以说无辜的水杯对应的编码称为负数-j的反码

如果有反码定义,请使用新公式: i-j=i的原码+(-j的反码)+1

引入补数定义:使除原始代码的已编码比特之外的所有比特反转(0变为1,1变为0,且已编码比特保持为1 ),然后加1

即反转后1

这将使新公式: i-j=i的原码+(-j的补码)

例:3-2

可以看作3(-2 )

3的源代码是0011

-2的补数为1110

0011 1110=0001

结果为1,符合3-2的差

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。