网站首页 > 资源文章 正文
补码运算的基本公式如下:
当进行补码运算的时候,不可避免会产生溢出问题:
上图中,+89和+108的符号位都是0,最高数值位都是1,最高数值位产生进位,前者则没有,结果产生溢出。
再看小数补码的定义:
上图中的最高溢出位1去除不要。
上图则是产生了溢出的情况。两个小数之和如果超过1,则肯定产生溢出;两个整数之和如果超过了最大位数(比如两位十进制能表示的最大数字是99)则产生溢出,上图中A-B的结果是-138,138超过了7位二进制能表示的最大数字127,因此产生了溢出。
对于小数溢出的检测,通常采用如下双符号位:
假设x=-0.110,y=-0.101 两个负数的绝对值都大于0.5,结果应该溢出:
取双符号位, 最后答案: 10 .101 有溢出
再考虑x=-0.010,y=-0.101 两个负数的绝对值没有同时大于0.5,结果应该无溢出:
最后答案: 11 .101 无溢出
由以上例子可以看出,当两个负数的绝对值都大于0.5的时候,其补码相加时最高数值位不会产生进位,从而导致双符号不一致,得出溢出的结论;而当两个负数的绝对值没有同时大于0.5,其补码相加时最高数值位会产生进位,得出结果无溢出。这种情形可以通过理论予以证明,我们这里只需要稍微了解一下。
那么,溢出以后如何解决呢?
假设求:-6+(-3)
-6的原码:1 110 -3的原码:1 011
-6的补码:1 010 -3的补码:1 101
由于包括符号位是四位,所以结果是0 100,是一个正数,明显产生了溢出。
为了解决这个问题,将数值位宽度增大为4位,则
-6的原码:1 0110 -3的原码:1 0011
-6的补码:1 1010 -3的补码:1 1101
最后结果是5位:1 0111 。由于这个结果是补码,再求其原码得到 1 1001,也就是-9,答案是正确的。
- 上一篇: 一文详解原码、反码、补码与位运算
- 下一篇: 二进制补码的计算原理(二进制补码的计算原理图)
猜你喜欢
- 2024-09-08 1.2 计算机内信息的表示与存储(计算机内部信息的表示及存储采用的是)
- 2024-09-08 C++手撕底层:位、字节、原码、反码、补码的深入理解
- 2024-09-08 算法水题练习(二)(算法题模板)
- 2024-09-08 二进制是怎么减法运算的?(二进制是怎么减法运算的原理)
- 2024-09-08 “原码、反码、补码”计算机如何更好的实现算法?
- 2024-09-08 PLC的加、减、乘、除指令有什么用?其实功能十分强大!
- 2024-09-08 【1682023】指令:NEG(088)—— 完成二进制求补的功能指令
- 2024-09-08 C语言-自运算、位运算、取反运算(c语言位运算的运算规则)
- 2024-09-08 软件设计(十三)-原码、反码、补码、移码
- 2024-09-08 原码、反码和补码:深度解析C语言中的二进制表示
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)