补码计算为什么会溢出??

 我来答
做而论道
高能答主

2022-03-03 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部

什么是溢出?

溢出,是指数据的大小,超出了编码所能表示的范围。

不仅是补码计算,任何形式的计算,都可能产生溢出。

比如:1999 年、2000 年 ...,这是用 4 位十进制表示。

当到了 9999 年,再过一年,你如果还用 4 位表示,就会溢出了。

如果不限制位数,就不存在溢出的问题。

-----------------------------

无符号数的溢出

计算机所能运算的位数是固定的,如:八位机、16、32、64 位机。

当字长为八位时,其计数范围是:0000 0000~1111 1111。

用它们表示十进制的【自然数】,就是:0~255。

在小学学过的【自然数】,在计算机专业中称为“无符号数”。

---------------

如果在其最大值(255)再加上一,就会超出表示范围,发生溢出。

此时,八个位就都为 0,进位将为 1。

进位为 1,就是无符号数溢出的标志。

进位 1,代表十进制的 256。256 也就是八位二进制数的计数周期。

-----------------------------

带符号数的溢出


八位二进制也能表示【整数】,包括【正整数、零和负整数】。

在小学学过的【整数】,在计算机专业中称为“带符号数”。


此时,0 ~ 127,就直接代表【零和正整数】;

   128~255,是以补码代表【负整数-128~-1】。

---------------

在正数最大值(127)上再加+1,就会超出表示范围,发生溢出。

此时得到是负数(128)。

注意,此时的进位为 0,结果的符号错误,才是溢出的特征。

---------------

在负数最小值(-128)再加-1,也会超出范围,发生溢出。

计算如下:

     1000 0000

   + 1111 1111

  ---------

   (1)   0111 1111


得到的是正数(127)。


注意,此时的进位为 1,并无意义。

   结果的符号错误,才是溢出的特征。

---------------

因为“带符号数”运算发生溢出,必定是结果超出范围。

所以,只有如下四种运算,才有可能出现溢出:

 正数+正数、负数+负数、正数-负数、负数-正数。

---------------

“带符号数”的溢出,与进位并无关系。

溢出的特征是:运算结果的符号,与正常结果相反。

---------------

判断是否溢出的方法


由人工计算:就可根据符号位来判断,如:

  正+正,出现负的结果;

  负+负,出现正的结果;

  ... ...


  发生上述四种之一,就是溢出。


也可考查进位与次高位的进位,两者不同,就是溢出。


用 CPU 计算:它就能自动判断,如果发生溢出则会令 OF=1。

-----------------------------

解骞0aW
2018-01-22 · TA获得超过1611个赞
知道小有建树答主
回答量:631
采纳率:91%
帮助的人:69.8万
展开全部
所谓溢出是指数据的大小超出了编码的表数范同围。例如字长为8,补码的表数范围是-128D(1000 0000B)至+127D
(0111 1111B)。现有两数求和127+1。按补码运算为0111 1111+0000 0001=1000 0000
补码1000 0000B的真值为-128D。而127+1的正确结果应该是+128,超出了表数范围,溢出了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沙里波特
2021-07-20 · TA获得超过5251个赞
知道大有可为答主
回答量:1.1万
采纳率:95%
帮助的人:640万
展开全部
溢出,是指数据的大小,超出了编码所能表示的范围。

不仅是补码计算,任何形式的计算,都可能产生溢出。
比如:1999 年、2000 年 ...,这是用 4 位十进制表示。
当到了 9999 年,再过一年,你如果还用 4 位表示,就会溢出了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wx...6@sohu.com
2017-11-08 · TA获得超过206个赞
知道小有建树答主
回答量:225
采纳率:75%
帮助的人:39.6万
展开全部
一.128 64 32 16 8 4 2 1 0 1 0 0 1 0 1 1 =75 0 1 0 0 0 0 0 1 =65add 0 1 0 0 0 0 0 1 =65 相同为1不同为0sub 0 1 0 0 1 0 1 1 =75 有1出1,全0出0二. 0 0 0 0 1 0 1 0 =A 0 0 0 1 0 1 0 1 =Badd 0 0 0 0 0 0 0 0 求补为反码加1 1 1 1 1 1 1 1 1 全1加1为 0 0 0 0 0 0 0 0 因此有溢出产生sub 0 0 0 1 1 1 1 1 求反加1为 1 1 1 0 0 0 0 1 无溢出产生不知道是不是你要的结果 看看再说
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式