首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

计算机是怎么存储负数的

先来弄清楚3个概念。

原码

原码是指一个二进制数左边加上符号位后所得到的码,且当二进制数大于0时,符号位为0;二进制数小于时,符号位为1;二进制数等于时,符号位可以为或1(+0/-0)。

计算机中所有的数均用0、1编码表示,数字的正负号也不例外,如果一个机器数字长是n位的话,约定最左边一位用作符号位,其余n-1位用于表示数值。

小数原码的定义

例如:[+0.1011]原=0.1011000

[-0.1011]原=1.1011000

整数原码的定义

反码

反码是一种在计算机中数字的机器码表示。对于单个数值(二进制的0和1)而言,对其进行取反操作就是将0变为1,1变为0。也就是说,若,则反码为;若,则反码。数值上面的一横表示反码的意思。

反码也称为一的补码(英语:ones' complement),其表示方法如下

式中,N为真值,n为编码的位数。

显然,正数的反码等于其原码,而负数的反码则可以通过保留其符号位,将原码的数值位取反得到。

补码

补码是一种用二进制表示有符号数的方法。

正数和0的补码就是该数字本身。

负数的补码则是将其对应正数按位取反再加1。

补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。只要一种加法电路就可以处理各种有号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路及补码电路即可完成各种有号数加法及减法,在电路设计上相当方便。

另外,补码系统的0就只有一个表示方式,这和反码系统不同(在反码系统中,0有二种表示方式),因此在判断数字是否为0时,只要比较一次即可。

下图是一些8-bit补码系统的整数。它的可表示的范围包括-128到127,总共256(=28)个整数。

计算机里面的运算都是靠加法器来完成的。加法器只能做加法。即使是减法。它也是将其转换成加法来运算的。

依据我们上面的定义:如果是都采用源码来运算,参看下面的代码

上图是都采用源码进行的计算。发现计算的结果是-20。明显是不对的。

正因为这样。所以计算机引入了反码和补码的概念。

原码 1000 0101 (-5)

---------------------------

反码 1111 1010

---------------------------

+1

---------------------------

补码 1111 1011

---------------------------

下面我们让-5的补码来参与运算。如下图:

现在的结果就是我们所希望了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200325A078OH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券