原码,反码,补码的思考和脚手架

十分精辟的讲解,也很有趣,建议大家直接看原文--引自慕课网

--------这里仅取我认为重要的做自己的摘要和笔记,建议大家看原文,尊重原作者.

(一)预备知识

认识二进制,十六进制。会二进制与十进制的相互转化运算
由计算机的硬件决定,任何存储于计算机中的数据,其本质都是以二进制码存储。

根据冯~诺依曼提出的经典计算机体系结构框架。一台计算机由运算器,控制器,存储器,输入和输出设备组成。其中运算器,只有加法运算器,没有减法运算器(据说一开始是有的,后来由于减法器硬件开销太大,被废了 )

所以,计算机中的没法直接做减法的,它的减法是通过加法来实现的。你也许会说,现实世界中所有的减法也可以当成加法的,减去一个数,可以看作加上这个数的相反数。当然没错,但是前提是要先有负数的概念。这就为什么不得不引入一个该死的符号位

原码,反码,补码的产生过程,就是为了解决,计算机做减法和引入符号位(正号和负号)的问题。

(二) 原码

原码是最简单的机器数表示法。
用最高位表示符号位,‘1’表示负号,‘0’表示正号。剩下位存放该数的二进制的绝对值。

若以带符号位的四位二进值数为例

1010 : 最高位为‘1’,表示这是一个负数,其他三位为‘010’,
即(0*2^2)+(1*2^1)+(0*2^0)=2(‘^’表示幂运算符)
所以1010表示十进制数(-2)。


部分正负数数的二进制原码表示法

所以原码,虽然直观易懂,易于正值转换。但用来实现加减法的话,运算规则总归是太复杂。于是反码来了。

反码:正数的反码还是等于原码
负数的反码就是他的原码除符号位外,按位取反。

若以带符号位的四位二进制数为例:

3是正数,反码与原码相同,则可以表示为0011
-3的原码是1011,符号位保持不变,低三位(011)按位取反得(100)
所以-3的反码为1100

部分正负数的二进制数反码表示法

对着上图,我们再试着用反码的方式解决一下原码的问题
0001+1110=1111 (1+(-1)= - 0)
互为相反数相加等于0,解决。虽然是得到的结果是1111也就是-0
但是:我们再试着做一下两个负数相加
1110(-1)+1101(-2)=1011(-4)
又出现了新问题
为了解决这个问题接下来就介绍我们的大boss补码

四)补码

补码:正数的补码等于他的原码
负数的补码等于反码+1。

带符号位的三码转换

啦啦啦.脚手架上来了

正数的原码就是它的二进制数前面加个0---正数原码反码补码都一样
**负数原码是其绝对值的二进制数前面加1;
负数反码是保持符号位不变,其他的按位取反;
负数补码是等于其反码+1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容