数据溢出

有符号数溢出
一个n位二进制数,它的补码可以表示的数据范围是[2^(n-1), 2^(n-1)-1]。

1 溢出只能发生在同号之间
异号相加:a>0,b<0
a+b=c =>b<c<a,a,b已经能够表示,那么a,b之间的数都能够表示,所以异号相加不存在溢出问题

而两个正数相加有可能大于最大上限,两负数相加有可能小于最小下限,所以存在溢出的可能性
2 常见的几种溢出情况

正数+正数=负数
example:0101+0011=1000 符号位变换0+0=1

负数+负数=正数
example:1001+1010=10011,(要求是四位二进制数,于是去掉一个符号位结果为0011)

3 溢出的判断标准:
符号端进位为c1,数据段最高位进位为c0
c0⊕c1=overflow
采用双符号位ffddd变形补码表示(一个f表示一个符号位,一个d表示一个数据位)
负数为11ddd
正数为00ddd
f1⊕f2=overflow(即两符号位不相同时溢出)

设A+B=S,A的符号位为X0,B的符号位为Y0,S的符号位为S0
根据上述2中分析,溢出时符号位变化为
0+0=1(001)
1+1=0(110)
做出卡诺图
在这里插入图片描述
由此
在这里插入图片描述
无符号数溢出
在这里插入图片描述
与题无关:
-128的原码和补码都是10000000
在这里插入图片描述

引用自:https://zhidao.baidu.com/question/303175158130244284.html
http://www.icourse163.org/learn/HUST-1003159001?tid=1450203445#/learn/content?type=detail&id=1214319393

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值