ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

负数补码的移位规则

2022-01-27 22:00:22  阅读:296  来源: 互联网

标签:反码 数轴 补码 负数 移位 原码


由原码求得补码的方法:

       1、定义法

       补码解决了计算机在进行数值运算的两个问题,一个是减法运算能不能使用加法电路,另一个是原码中“0”的表示不唯一。正数的补码就是其原码,整数负数的补码是:真值+以2为底以数值位数加一为指数的幂(模),即以这个幂为模的补数。

       这里描述下补码的几何意义,大家可以画一个数轴,假定数值位有三位,模是16,那么加上一位符号位,数轴从0,000开始往右依次加一是0,001、0,010、0,011 ... 0,111共八个数,这个时候如果继续加一等于8(0,1000),发生溢出无法表示。

       现在我们转而用补码的思路,溢出的数继续放到数轴上,把0,1000变成1,000放到数轴的最左端,依次加一1,001、1,010、1,011 ... 1,111,共八个数。

       这里我们看到补码与原码相比只有一种“0”的表示形式,原码中的-0(1,000)在补码中表示-8。对于补码,我们按照模的思想,把四个比特位包括符号位表示的数全都一一映射了数轴上的数(1,000无符号数中表示8,也就是从数轴最左边的数看成无符号数依次是8、9、... 15),所以补码中的符号位,是参与加减运算的,并且由于其补数的性质,在二进制中“溢出”的高位舍去之后的数恰好是正确的数值(仅指正负补数相加。区别于真值溢出,此处不讨论)。

       小数负数的补码的模固定为2,小数补码比原码多表示一个-1(1,000)。

       根据定义公式,结合二进制数的性质,负数补码就等于原码的除符号位外的每位求反加一。反码很有趣,其实就是要用每个比特位都是1的数去和这个数进行运算,无论加减都会得到每位取反的结果。从数学形式上的定义来看,负数的原码是在最高位左边添了一个1,反码中的模就是补码的模最右端位减去1。

      

2、规律法

       根据“取反加一”结合二进制数的特性,根据原码求补码时可以选取另一种方法:从原码的最右端开始向左第一个不是0的位置开始(不含),每位取反。原理也很简单,取反加一之后,反码只会改变从右往左开始第一个不是1(含)的位。

      

       下面讨论负数补码的移位规则   

       移位操作可以提高二进制在计算机中的运算效率。这里讨论负数补码的移位规则,根据上文规律法中的结论,可知补码结合了原码和反码位的特点,其低位向高位找到的第一个1左边(不含)和反码相同右边(含)和原码相同。

       算术移位中符号位不变的前提下,   

       负数的原码左右移位都是缺位补0,丢失的位如果为1发生溢出出错或者精度丢失,和原码相反,负数的反码左右移位都是缺位补1,丢失的位如果为0发生溢出出错或者精度丢失。

       负数的补码情况结合原码和反码,左移时低位空出补0、高位丢0结果出错,右移时高位空出补1、低位丟1影响精度。

标签:反码,数轴,补码,负数,移位,原码
来源: https://blog.csdn.net/weixin_44767845/article/details/122724155

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有