反码、原码和补码的引入与转换

参考链接中对原码、反码补码的来由与相互之间的转换进行了详细讲解,精彩至极!笔者此处只是记录了一些自己的笔记便于日后翻阅理解(红色字体部分);

目录

一、原文

(一)预备知识

(二)原码

(三)反码

(四)补码

(五)补码的思想

(六)补码实例

(七)为何这样求补码

二、补充与注释

三、原文地址


一、原文

本文从原码讲起。通过简述原码,反码和补码存在的作用,加深对补码的认识。力争让你对补码的概念不再局限于:负数的补码等于反码加一

接触过计算机或电子信息相关课程的同学,应该都或多或少看过补码这哥仨。每次都是在课本的最前几页,来上这么一段:什么反码是原码除符号位,按位取反。补码等于反码加一。然后给整得莫名其妙,稀里糊涂地,接着就是翻页,反正后面的内容也跟三码没多大关系。

我原来也是看了好几遍都没看懂。古人云:事不过三。学C语言的时候,看过一次。不懂?看《计算机基本组成原理》的时候看过,还是不懂!到了大三,上《单片微机原理与接口技术》的时候仍旧是不懂。到了期末,复习的时候,和宿舍的人瞎聊。说讲讲这些码呀,我说我也不是很清楚呀。然后就一边说怎么求码,一边算。玩着玩着,突然就明白了。我说好,打住。不说了,放假我在好好整理下思路,于是就有了这篇额。。算讨论帖吧。

好了,废话不多说。开始我们的原码,反码,补码之旅。

(一)预备知识

认识二进制,十六进制。会二进制与十进制的相互转化运算

由计算机的硬件决定,任何存储于计算机中的数据,其本质都是以二进制码存储。

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

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

  1. 而且从硬件的角度上看,只有正数加负数才算减法。

  2. 正数与正数相加,负数与负数相加,其实都可以通过加法器直接相加。

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

本文可能比较长,没必要一下子读完。原码,反码,补码,按章读。
重点在于讲补码,到了补码可能有些绕,建议带着笔,写出二进制数一起算。

表达可能不够清楚严谨,望见谅。

(二)原码

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

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

  1. 1010 : 最高位为‘1’,表示这是一个负数,其他三位为‘010’,

  2. 即(0*2^2)+(1*2^1)+(0*2^0)=2(‘^’表示幂运算符)

  3. 所以1010表示十进制数(-2)。

下图给出部份正负数数的二进制原码表示法

OK,原码表示法很简单有没有,虽然出现了+0和-0,但是直观易懂。
于是,我们高兴的开始运算。

  1. 0001+0010=0011 (1+2=3)OK

  2. 0000+1000=1000 (+0+(-0)=-0) 额,问题不大

  3. 0001+1001=1010 (1+(-1)=-2)

噢,1+(-1)=-2,这仿佛是在逗我呢。

于是我们可以看到其实正数之间的加法通常是不会出错的,因为它就是一个很简单的二进制加法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值