自动检测溢出的unsigned int加法
2016-05-15 17:04
155 查看
int uadd_ok(unsigned int a, unsigned int b) { int result =a+b; if(result>a) { printf("the add is ok\n"); } else { printf("the add is overflow\n"); } return result; }
原理:对于无符号整数而言,两个取值范围为0~2w−1 之间的整数相加得到取值范围为0~2w−1 和2w~2w+1−2 对于第一个范围内的数值,加法没有溢出,表示的数值范围任然在w位内可以表示,那么a+b>a是肯定的
对于得到的result在2w~2w+1−2, 那么在w+1位上会有数值1,存储的时候,自动把w+1位上的1截断掉,那么得来的数值就等于 result=a+b−2w ,发生了溢出。由于b<2w,所以 b−2w<0, 因此判断溢出可以通过 result<a或者b来判断
相关文章推荐
- Java面向对象之封装
- hibernate3 spring3 struts1
- 简单 Java 加密算法 1.0
- 大公司c#&.net转型java的原因有哪些?
- log4j 配置详解
- 在java中使用dom4j解析xml(示例代码)
- Picasso源码解析
- IOS中使用像素位图(CGImageRef)对图片进行处理
- 洛谷P1656 炸铁路
- 初识Volley框架 加载以及查看json数据+html元素
- CAN与CANOpen(四)
- 理解LSTM网络
- iOS--OC--图片拉伸和尺寸变换,图片简单处理
- windows 无法找到unistd.h 的解决方法
- ruby 使用Struct场景
- 怎样在JavaWeb项目中自定义一个配置文件 dom4j
- Problem C
- Android Studio Tips(OSX) - 包括快捷键
- Map集合
- javascript利用map,every,filter,some,reduce,sort对数组进行最优化处理