为什么引入88的原码 反码和补码码

1)讨论原码之前首先需要了解两个概念:机器数和真值。
a.一个数值在计算机中的二进制表示形式,就称为这个数值的机器数。机器数是带符号的,其中最高位是符号位,1表示负数,0表示正数。比如,
就是-64的机器数,即在计算机中的二进制表示形式。同样的,就是64的机器数。
b.真值:因为第一位是符号位,所以机器数的形式值并不是真正的数值。机器数中除符号位之外的二进制串表示的才是真值(当然要加上符号才是真正的值)。
2)对于一个数,在计算机中如何表示呢?这就涉及到对其的编码问题,原码、反码、补码就是计算机中对数的三种编码方式。
a.原码就类似于上述机器数的定义方式,一个数的原码就是符号位加上真值的绝对值,即第一位表示符号位,其余位表示值。
-64的原码就是:
+64的原码就是:
计算机中只有加法器没有减法器,减法运算是转化为加法来进行的。以下举例说明使用原码进行加减法的过程:
64-64=64+(-64)=+
1-1=1+(-1)= + 00 0010=-2 &计算错误
原码的表示方式存在的问题:
1.存在+0、-0的情况()
2.进行减法运算的时候,有些情况会计算出错(1-1=-2)
b.为了解决减法运算会出错的情况,引入了反码的编码形式。对于正数,其反码与原码完全相同(原码表示下,加法是正确的,所以正数的反码保持与原码相同即可),而负数的反码是保持原码的符号位不变,所有位依次取反,就得到反码。以下分别给出+1,-1的反码形式,并使用反码进行减法运算:
1-1=1+(-1)=11 11,结果是反码形式,需要将其转化为原码形式才能得到确切值,原码是=-0。
但是反码对于0的表示方法任然是有两种,这里以4 bit为例:
c.采用了反码的形式之后,减法运算的结果是正确了的。不过对于0还是存在+0、-0的情况。为了解决这个问题,补码出现了。正数的补码就是其原码自身,负数的补码是在其反码的基础上+1。还是以+1、-1的补码形式说明:
1-1=1+(-1)=1
丢掉最高位=(正数的补码和原码相同,所以是0)。
使用补码不仅解决了+0、-0的情况,而且还可以多表示一个最低数。下图以4 bit为例,说明了原码、反码、补码的&进化过程&:
(参考:)
以下讨论原码和补码两种编码形式下,表示的取值范围。从上图易知,分别使用原码和补码,4 bits的取值范围是:
原码:[-7,7](包含+0、-0)
补码:[-8,7](只有一个0)
两种编码方式都表示了16个数值,只是原码有+0、-0之分,而补码只有一个0(+0),没有-0,因此可多表示一个最小值-8。-8的补码推倒过程如下:
-1-7=00=-8,所以-8的补码是1000,其没有对应的反码和原码。
而8 bits的范围是:
补码:[-128,127] =-128
因此对于n bits分别以原码、补表示的数值取值范围是:
原码:[-(2^(n-1)-1),2^(n-1)-1] & 有1个符号位,所以是n-1
补码:[-(2^(n-1)),2^(n-1)-1]
3)计算机中是以补码的形式表示数值的(起码是整数),编程语言也是以补码的形式表示数值的。
根据负数的原码求补码有一个比较简单的计算方法:符号位保持不变。从最低位开始,直至遇到第一个1之前,之前的所有位保持不变。遇到第一个1之后,保留这个1,以后按位取反直到符号位后一位。
根据负数的补码求其原码的方法:符号位保持不变,其余各位取反,然后再整个数加1。
另外,两个二进制数相减,等于加上减数保持符号位不变,取反 +1,即使加上其补码。
4)计算机只有加法器,将减法转化成加法,是利用了数学中的同余概念。
阅读(...) 评论()博客访问: 479392
博文数量: 264
博客积分: 6330
博客等级: 准将
技术积分: 2238
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++ 20:03:02
引入原码 反码 和补码的目的就是为了解决减法问题,因为计算机CPU的运算器中只有加法器,要把减法转化成加法来计算。举个例子,A表示十进制数“+16”,B表示十进制数“-19”,把这两个数的原码直接相加,得:A=+16 (A)原=B=-19 (B)原= +————其结果符号位为1是负数,其数值位为100011,即等于十进制数“-35”,这显然是错的结果。再比如,十进制数“+16”与“+19”的原码直接相减,得: -————结果为“-125”,这又是错的。但是引入补码后,加减法都可以用加法来实现,如“-16+11”的运算: +&&&& -16的补码&&&&&&& 11的补码————&&&&&&& -5的补码如果是“-16-11”,那么就转化为加法运算“-16+(-11)” +&&&& -16的补码&&&&&& -11的补码————&&&&& -27的补码在字长为8位的系统中,最高位所产生的进位被自然丢弃,运算结果的机器数为,是-27的补码形式,结果正确。
阅读(1646) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
请登录后评论。他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)73被浏览18,065分享邀请回答469 条评论分享收藏感谢收起289 条评论分享收藏感谢收起【计算机】为什么补码等于反码加1?_百度知道
【计算机】为什么补码等于反码加1?
补码到底是个什么概念?
我有更好的答案
补码等于反码加1是二进制计算出来的规则补码的意思就是一个数的补数,类似于十进制,12相对于100的补数是88
采纳率:33%
为您推荐:
其他类似问题
补码的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 二进制的反码和补码 的文章

 

随机推荐