编程判断整数运算溢出--减法
整数相减溢出判断#
有符号整数相减#
异号相加不会溢出,而同号相减相当于异号相加,故不会溢出;异号相减,正常情况结果都与被减数同号,所以从次判断是否溢出。而判断符号是否相同,即判断有符号整数的符号位是否相同,故采用位运算进行判断。(只需关心符号位即可)所以转化为判断:当x,y符号不同时,x-y的结果与被减数x符号不同则发生有符号整数溢出。
无符号整数相减#
sub(x,y)(默认x>y情况):x<y,正常情况为负数,故溢出;x-y正常情况,结果小于x(减数),故判断x-y<x。
测试代码#
#include<stdio.h>//0~4294967295//-2147483648~2147483647int sub1(int x,int y){ printf("z=%d\n",x-y); if(((x-y)^x&(x^y))<0) printf("有符号整数溢出\n"); else printf("有符号整数未溢出\n"); return 0;} int sub2(int x,int y){ printf("z=%u\n",x-y); if(x<y||x-y>x) printf("无符号整数溢出\n"); else printf("无符号整数未溢出\n"); return 0;} int main(){ sub1(2147483647,-1); sub2(1,4294967295) ; return 0;}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通