0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

计算机为什么使用补码的形式来表示负数

Wildesbeast 来源:今日头条 作者:算法集市 2020-02-12 15:28 次阅读

计算机有三种编码方式来表示同一个数:

原码:符号位加上真值的绝对值,第一位表示符号,其余位表示值。

反码:正数的反码是其本身;负数的反码是在其原码的基础上,符号位不变,其余位取反。

补码:正数的补码还是其本身;负数的补码是在其原码的基础上,符号位保持不变,其余位取反,最后+1。即反码加1。

对于+1和-1,

[+1] = [0001]原 = [0001]反 = [0001]补

[-1] = [1001]原 = [1110]反 = [1111]补

为什么计算机采用补码的形式来表示负数呢?

首先我们知道,一个数在计算机中有正负之分,这个数的最高位(符号位)用来表示它的正负,其中0表示正数,1表示负数。

对于计算机来说,加法是最基础的运算,要设计的尽量简单。

根据加法的运算法则,a-b等于a+(-b)。

如果能将符号位也参与到运算中,而非单独“辨识符号位”,就可以大大简化计算机的基础电路。

于是,人们开始探索只保留加法,并将符号位参与到运算中的方法。

1、原码:1 - 1 = 0

首先来看原码:1 - 1 = 0

1 - 1 = 1 + (-1)

= [0001]原 + [1001]原

= [1002]原

= -2

这显然是错误的。

2、反码:1 - 1 = 0

对于反码:

1 - 1 = 1 + (-1)

= [0001]反 + [1110]反

= [1111]反

= [1000]原

= -0

用反码进行计算,发现结果是对的。但有一个问题是“0”的表示有两个:

-0([1000])

+0([0000])

而0带符号是没有意义的。

且采用补码形式,对于4位的二进制,其表达的范围为:[1000]反~[0111]反,即[1111]原~[0111]原,也即[-7,7]。

因为“0”有两个编码形式,所以等于浪费了一个编码。

3、补码:1 - 1 = 0

而补码解决了反码的问题:

1 - 1 = 1 + (-1)

= [0001]补 + [1111]补

= [0000]补

= [0000]原

= 0

使用补码, 不仅仅解决了0的符号以及存在两个编码的问题,而且还能够用[1000]来表示-8,即多表示一个最低数。

即对于4位的二进制,使用原码或反码表示的范围为[-7,+7],而使用补码表示的范围为[-8,7]。

因为计算机采用补码来表示负数,所以对于编程中常用到的32位int类型,可以表示范围是:[-2^31,2^31-1] 。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二进制
    +关注

    关注

    2

    文章

    795

    浏览量

    41643
  • 计算机
    +关注

    关注

    19

    文章

    7488

    浏览量

    87849
  • 编码
    +关注

    关注

    6

    文章

    940

    浏览量

    54814
收藏 人收藏

    评论

    相关推荐

    计算机中原码,反码,补码之间的关系

    首先提几个概念: 原码,反码,补码     原码是什么?      原码就是早期用来表示数字的一种方式: 一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个
    发表于 09-17 10:00

    原码反码补码的详细理解

    `一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在
    发表于 11-16 15:32

    补码是什么 补码和原码的转化

    计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1
    发表于 12-11 17:45

    单片机的重要功能/组成

    的数均用补码表示(正数因形式一致,可认为即用原码表示),运算结果也是补码.2. 微型计算机原理冯诺依曼结构:
    发表于 11-18 08:49

    计算机的原码与反码及其补码是干啥的?

    。  计算机存储数据使用补码而不是直接用二进制,因为二进制不能表示负数。  原码虽然能表示负数
    发表于 04-13 17:04

    补码加法,补码加法计算原理

    补码加法,补码加法计算原理    负数补码表示后,可以和正数一样来处理。这样,运算器里只需要一个加法器就可以了,不必为了
    发表于 04-13 11:41 1.8w次阅读

    深入探求反码和补码

    ! 希望本文对大家学习计算机基础有所帮助! 一、机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念。 1、机器数 一个数在计算机中的二进制表示
    的头像 发表于 09-15 15:23 1309次阅读

    关于二进制表示补码计算的来龙去脉

    既简单、又强大的数字。但是大部分人,对于二进制、二进制计算、原码、反码以及补码的认识,仍处于机械的强制记忆阶段。尤其是对一些编码和计算,仍然处于模糊的认识阶段,例如: CPU 是如何表示
    的头像 发表于 06-07 14:30 2491次阅读

    计算机为什么要使用补码

    ,增加了计算的时间,能不能用加法器实现减法器的功能?这个实现的过程就用到了补码计算机为什么使用补码?采用补码可以简化
    的头像 发表于 09-12 16:06 7608次阅读

    计算机中的负数要用补码表示

    一个数在计算中的二进制表示形式,叫做这个数的机器数,机器数是带符号的,正数为0,负数为1。
    的头像 发表于 03-30 09:59 2944次阅读
    <b class='flag-5'>计算机</b>中的<b class='flag-5'>负数</b>要用<b class='flag-5'>补码</b><b class='flag-5'>来</b><b class='flag-5'>表示</b>?

    计算机组成原理——数值型数据的表示

    计算机中,无论是何种形式的数据均采用数字化形式表示,即用“0”、“1”两个基本符号构成的编码表示,以便采用数字电路实现其存储与处理。
    的头像 发表于 05-25 16:05 5204次阅读
    <b class='flag-5'>计算机</b>组成原理——数值型数据的<b class='flag-5'>表示</b>

    FPGA有符号数,定点小数表示计算机数值表示规则

    计算机体系中,计算机并不认识负数,那么计算机是如何表示负数呢?
    发表于 06-16 15:34 2442次阅读
    FPGA有符号数,定点小数<b class='flag-5'>表示</b>及<b class='flag-5'>计算机</b>数值<b class='flag-5'>表示</b>规则

    计算机原码、反码、补码的概念

    计算机内部数值是以补码的方式进行存储的,采用补码进行数据存储当然有其优点,下面会一一介绍相关内容,让各位彻底弄懂原码、反码、补码的概念以及为什么采用
    的头像 发表于 01-09 12:25 3908次阅读
    <b class='flag-5'>计算机</b>原码、反码、<b class='flag-5'>补码</b>的概念

    计算机为什么利用反码实现减法?

    元器件的限制。当时,计算机的电路设计主要采用位操作(二进制)实现。为了能够有效地表示负数,人们引入了反码的概念。使用反码可以使计算机系统在
    的头像 发表于 02-19 15:10 851次阅读

    二进制补码及与原码的互相转换方法

    表示负数。其余位表示数值的大小。 二进制补码‌是一种用于表示有符号整数的二进制编码方式,常用于‌计算机
    的头像 发表于 09-19 22:25 484次阅读