无符号整形的加减乘除运算
来源:互联网 发布:天正建筑t20 mac 编辑:程序博客网 时间:2024/05/01 10:49
(1)无符号整形加法:
对于32位表示的任意无符号整形x(xw-1…x0),有x∈[0, 2w-1],则s=a+b∈[0, 2w+1-2],所以
1、当s∈[0, 2w-1]时,未发生溢出,s=a+b
2、当s∈[2w,2w+1-2]时,发生了正溢出,由于无符号整形只能由32位表示,所以当溢出发生时需要截断到32位,舍弃第w位,此时s=(a+b)%2w,即s=a+b-2w
那么,怎么判断两个无符号整形“+”操作发生了溢出?
当发生溢出时,s=a+b-2w∈[0, 2w-2],所以s≥0;另外,由于a、b∈[0, 2w-1],所以s=a+b-2w < a
代码表示为
bool is_overflow(unsigned a, unsigned b)
{
unsigned s = a + b;
return s < a;
}
(2)无符号整形减法:
对于32位表示的任意无符号整形x(xw-1…x0),有x∈[0, 2w-1],假设x的加法逆元是-x,则-x可以表示为
(I)-x=0,x=0
(II)-x=2w-x
则对于z=x-y,可以认为z=-y+x,则无符号整型的减法运算可以转换为无符号整型的加法运算。
(3)无符号整型的乘法运算:
对于32位表示的任意无符号整形x和y,设z=x*y,则z∈[0,(2w-1)2],要完整的表示z需要2w位,此时会发生溢出,操作系统会将z截断至w位,因此有
z =(x*y)mod2w。
(4)无符号整型的除法运算:
对于除法运算,需要注意的是被除数不能为0(这种情况不会视为溢出,而是作为异常中断来处理),且除法的结果总是舍入到0。
0 0
- 无符号整形的加减乘除运算
- 无符号整形
- 无符号整形问题
- 无符号数加减乘除
- 无符号和有符号的整形比较
- 无符号整形的reserve bits的优化方案
- 返回无符号整形的二进制数1的个数
- 指针的本质是无符号的整形
- 用无符号的整形来表示一个IP地址
- 求一个无符号整形变量1的个数
- 无符号整形压缩与解压缩的一种实现
- 对无符号整形数的比特位反转
- 用无符号的整形来表示一个IP地址
- 64位无符号整形格式化符号
- 无符号长整形无警告输出:
- 宏定义 UL无符号长整形
- PHP 关于无符号整形Unsigned
- PHP 关于无符号整形Unsigned
- 使用wsimport构建WebService客户端
- unity 用点乘和叉乘来判断 物体与人物的相对位置
- Hammer.js——移动设备触摸手势
- 异步消息的传递-回调机制
- 第三周 项目2 建设“顺序表”算法库
- 无符号整形的加减乘除运算
- HDU 5898 数位DP
- iOS开发 如何适配iOS10
- oracle11g 数据库导出报“ EXP-00003: 未找到段 (0,0) 的存储定义”错误的解决方案
- 猫都能学会的Unity3D Shader入门指南(二)
- JSP的3个编译指令、7个动作指令和9个内置对象
- DNS记录 如果把DNS的体系结构比喻成一棵倒挂的大树,那么毫无疑问,每一条记录就是组成这棵大树必不可少的枝叶了。所谓的DNS记录,其实就是具有特殊功能的一个个数据条目。在windo
- 文件的读取
- 关于百宝云自动备份功能