补码加减运算及溢出判断
来源:互联网 发布:热网远程监控系统数据 编辑:程序博客网 时间:2024/05/16 06:54
加法运算:
[x+y]补=[x]补+[y]补
可直接相加。
减法运算:
[x-y]补=[x]补+(-[y]补)
x的补码加上y补码的相反数。(符号也要相反)(称为机器负数)。
溢出判断:
首先要明白,一个正数和一个负数相加,结果一定不会溢出(因为结果的绝对值一定小于两个加数的绝对值,两个加数都表达出来了,结果一定能表达出来。) 所以,发生溢出的情况一定是符号相同的两个数相加。 分情况讨论: --正+正-- 符号位0,数位相加,如果结果的符号位变成1了,那一定是两个加数的最高位相加进上来的。 发生溢出。 --负+负-- 符号位都是1,所以符号位一定会进位。数位相加,如果最后符号位是0,说明结果变成正的了,那一定是发生溢出了(负+负!=正)。 在这里要理解一下,“为什么负数补码最高位相加,发生进位的不是溢出,反而不进位是溢出呢?难道和正数不一样吗?” 在补码发生溢出的情况中,正数是因为太大发生溢出;但是负数是因为它太小发生的溢出。(-5-5 -> 1011+1011 = 10110 ->0110 溢出),有进位说明两个负数较大。
综上:
当符号位和最高位都没有进位(正数相加)或符号位和最高位都有进位(负数相加),没发生溢出。
只有一个发生进位的,发生溢出。
双符号位判断溢出:
原来符号位只有一个,现在为了方便再加一个。
正数:00 负数 11
结果01时,结果为正,发生正溢出(正数太大了)
结果10时,结果为负,发生负溢出(负数太小了)
还是00或11就是没有溢出了。
有人会问,难道负溢出就不会是11了吗?
举例:我们想让结果进位到符号位,又要让加数最小(绝对值最大,这样才能溢出)
11100是最好的用例(这是发生进位的最小补码)。
我们把两个 11100 相加
11100+11100=111000 -> 11000 这时发生溢出了吗?
11000是-8,加数 11100是-4。
没有发生溢出。
移位运算:
算数移位:在二进制中,算数移位的左移 每移一位表示*2,右移/2
原码移位,符号位不参与移位
补码移位,符号位参与移位。左移时符号位左移,右移时符号位不变,最高位补符号位。
逻辑移位:把数字看成一串二进制数,让怎么移就怎么移,符号位和数位没区别。
- 补码加减运算及溢出判断
- 补码运算溢出判断方法
- 补码加法运算溢出判断
- 用补码表示整数及加减运算
- 用补码表示整数及加减运算
- 补码的加减运算
- 补码的加减运算
- 补码:统一加减运算
- 有符号整数的加减运算,溢出判断
- 补码运算中的溢出
- 补码运算与溢出
- 原码反码补码加减运算
- 实现补码加减运算的逻辑电路
- 原码、反码、补码之加减运算
- 有符号数二进制补码加减运算
- 原码、补码、运算(加减、异或)实例
- [汇编]数的补码表示及其加减运算
- 补码加减法判断进位判断是否溢出的总结
- JQuery可拖拽插件:NesTable
- cisco专有协议CDP、DTP、ISL、PAGP、VTP简介
- 在虚拟机VMware上安装Linux发行版CentOS步骤
- 查找 Hash VS Tree
- 第十九章 动态URL权限控制——《跟我学Shiro》
- 补码加减运算及溢出判断
- 创建两个文件并将其改名
- ubuntu17.04安装后的一些配置
- Qt5之QLabel
- mailto用法
- 30岁买房只需记住一句话,永远不会出错!
- 算法 有向无环图 拓扑排序
- Mac 上配置 cocos2d-x3-x android 的环境
- Spring整合JMS(四)——事务管理