ICode9

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

计算机基础--原码、反码、补码

2020-08-15 19:34:50  阅读:1361  来源: 互联网

标签:反码 -- 补码 0100 110 100 原码


声明:以下二进制数据都是指八比特位长度的二进制数;以下十进制数都是指的整数。

1、什么是原码?

我们来看一下百度百科的定义:

原码(true form)是一种计算机中对数字的二进制定点表示方法;

原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1,其余位表示数值的大小。

举个例子:

100的源码怎么表示?--答案是:0 110 0100

-100的源码怎么表示?--答案是:1 110 0100

此外,还要注意一点:

百度百科中看到一句话:原码不能直接参加运算,可能会出错。

他举出一个例子:在数学中 1+(-1)=0;但是用二进制进行计算的时候就会变成:0000 0001+1000 0001=1000 0010,换算成十进制是 -2。显然结果是错误的。

2、什么是反码?

反码通常是用来由原码求补码、或者由补码求原码的过渡码。

那么同一个数的反码与原码的对应关系是什么呢?反码跟原码是正数时,一样;负数时,反码就是原码符号位除外,其他位按位取反。

举个例子:

100的原码是?0 110 0100

100的反码是?0 110 0100

========

-100的原码是?1 110 0100

-100的反码是?1 001 1011

从上面的例子来看

I、想知道一个十进制数的二进制反码表示形式,得先知道这个十进制数的原码。也就是说,原码虽然简单,但却非常重要。

II、原码、反码都是数值在计算机中的表示方法,他们俩首位都表示符号位,即1为负、0为正;其余的为数值位。原码的数值位的值就是所表示数的真值。反码的数值位的意义我们不去深究。

3、什么是补码?

在了解什么是原码的时候,我们就发现了原码在二进制加减运算中存在问题。所以,计算机系统,数值一律采用补码来表示和存储。原因是,补码能够将符号位和数值位统一处理;同时,减法和加法也可以统一处理。

在百度百科中,关于补码的概念引入,他给出了一个非常有趣的例子:https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81/6854613?fr=aladdin

这个例子解释了以n值为模的系统里,减法问题如何转化成加法问题的--把减数用相应的补数表示就可以了。

而这个例子中出现的补数的概念,用在计算机对于数值的处理上,就是 补码。

那么补码和原码的对应关系是怎么样的呢?

I、对于正数,他的原码、反码、补码都是一样的,即都是原码的表示形式。

比如:100的原码 0 110 0100;反码 0 110 0100;补码 0 110 0100。

II、对于负数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变--这不就是求反码的过程么。),然后加1。

比如:-100的原码 1 110 0100;除符号位外按位取反 1 001 1011;再加1:1 001 1100(即为-100在计算机中的存储形式--也就是-100的补码)。

III、对于-100求补码的方法,还有一种:

就是记住这个口诀:对负数求补码,先写出其绝对值的原码,再按位取反,再加1。

我们来试一下:-100求补码,先找出-100的绝对值100的原码:0 110 0100;再按位取反 1 001 1011;再加1: 1 001 1100。

其实这两种,在第二步取反的时候,就得到了一致的结果了,所以在第三步再加1,得到的结果一样。所以上面两种方法就看个人习惯了。。。

IV、对于0的补码是唯一的:0000 0000。

(+)0我们就不必说了,符号位为0的正数,原码、反码、补码都一样:0000 0000。

(-)0求补码→采用第II步里面的方式先将(-)0的原码(1 000 0000)除符号位按位取反→1 111 1111→再加1→1 0000 0000(这里我们讲解的是8位二进制数,所以最高位1舍去)→ 0000 0000 (补码)。

最后总结:原码、反码、补码(以下都是指整数的八位二进制形式)

对于正数 其原码、反码、补码都一样。以后遇到正数求补码、反码不要慌,写出原码就是答案。

对于负数 其反码=原码(除符号位)按位取反;其补码=负数的原码先取反码再加1。

 

以上是对计算机系统中对于数的二进制表示形式的总结,记录下来,以便以后查看。

标签:反码,--,补码,0100,110,100,原码
来源: https://www.cnblogs.com/bigbosscyb/p/13509976.html

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

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

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

ICode9版权所有