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

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

3天内不再提示

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

嵌入式那些事 来源:嵌入式那些事 2024-01-09 12:25 次阅读

在计算机内部数值是以补码的方式进行存储的,采用补码进行数据存储当然有其优点,下面会一一介绍相关内容,让各位彻底弄懂原码、反码、补码的概念以及为什么采用补码作为数据存储的方式。

注意:下面列举的例子均是指8位的字节数据。对于16位,32位的数据同样适用,只是为了书写方便,8位是最好的选择啦!

1、无符号数与有符号数

在介绍原码、反码和补码的概念之前,先来了解下无符号数和有符号数。

在计算机系统中,我们可以将数分为两类:无符号数和有符号数。无符号数的意思是我们不关心这些数的符号,因此也就无所谓正负,反正它们就是数而已,就像小学生一样,眼中只有自然数。在8位的字节运算中,无符号数的范围是0000_0000B~1111_1111B,即十进制的0~255。

有符号数是分正负的,而且规定,数的正负要通过它的最高位来辨别。如果最高位是0,它就是正数;如果是1,就是负数。这样一来,在8位的字节运算环境中,正数的范围是0000_0000B~0111_1111B,即十进制的0~127;负数的范围是1000_0000B~1111_1111B,即10进制的-128~-1。也就是说8位的数据,有符号数的范围是-128~127(对这里的负数有疑问的可以往下面看)。

2、原码、反码与补码

原码:最高位表示符号位,其余位代表数值大小。如果最高位是0,它就是正数;如果最高位是1,就是负数。例如:十进制数+2,其二进制形式为:0000_0010B;如果是-2,就是1000_0010B。因为最高位是符号位,所以原码二进制的形式值不等于真正的数值。例如上面的有符号数1000_0010B,其最高位1代表负数,表示的数值为-2,而不是形式值130(1000_0010B转换成无符号十进制等于130)。

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

补码:正数的补码是其本身;负数的补码是在其原码的基础上,符号位不变,其余各数值位取反,最后+1(即负数的补码是其反码+1)

下面列举几个8位二进制数的原码、反码和补码的编码形式:

十进制数 原码 反码 补码
42 0010 1010 0010 1010 0010 1010
-42 1010 1010 1101 0101 1101 0110
127 0111 1111 0111 1111 0111 1111
-127 1111 1111 1000 0000 1000 0001

3、补码存储数据的优点

在讲述原码、反码和补码时,有一个特殊的数值没有涉及到,那就是0,在我们平时使用中,0是没有正负之分的,但是不可否认+0 = -0,那么下面列举下+0,-0的原码、反码与补码的形式:

十进制数 原码 反码 补码
+0 0000 0000 0000 0000 0000 0000
-0 1000 0000 1111 1111 0000 0000

为什么-0的反码1111_1111B进行加1操作求取到的-0补码是0000_0000B。因为这里假定数据宽度是8位的,1111_1111B加1之后,会逐个向上进位,我们假定有第9位,且值为0,那么0_1111_1111B加1之后,就变成了1_0000_0000B,但是实际上我们要的数据是8位的宽度,这里舍弃第9位,最后结果就变成了0000_0000B。

好了,在讲述补码的优点之前,先看看计算机为什么不使用原码作为数的存储格式而采用补码作为数的存储格式。

下面说说原码的优缺点吧。

原码的优点当然是简单直观,例如+2的原码为:0000_0010B,-2的原码为:1000_0010B。

原码的缺点也显而易见

(1)、+0与-0在原码中竟然有两个二进制形式,与我们熟知的+0=-0貌似有出入。

(2)、原码不能直接参加运算,可能会出错。例如:1+(-1)=0,而用原码的二进制形式进行运算为:0000_0001B + 1000_0001B = 1000_0010B,换算成十进制为-2,显然计算结果错误。

那么计算机为什么要使用补码呢?

首先,根据运算法则减去一个正数等于加上一个负数,即: 1-1 = 1+(-1),所以计算机被设计成只有加法而没有减法,而让计算机辨别”符号位”会让计算机的基础电路设计变得十分复杂,于是就让符号位也参与运算,从而产生了反码。

用反码计算,出现了”0”这个特殊的数值,0带符号是没有任何意义的。而且会有0000_0000B和1000_0000B两个原码编码表示0。于是设计了补码,负数的补码就是反码+1,正数的补码就是正数本身,从而解决了0的符号以及两个编码的问题:用0000_0000B表示0,用1000_0000B表示-128。

注意:-128并没有原码和反码。使用补码,不仅仅修复了0的符号以及存在两个编码的问题,而且还能够多表示一个最低数值。

如果还不清楚-128怎么来的,那么我就来按我的想法来推出来吧,-127的原码为:1111_1111B,则其反码为:1000_0000B,补码为:1000_0001B,那么自然我们可以想想补码为1000_0000B代表的就是-128=-127-1=1000_0001B - 1= 1000_0000B。这也就是8位数据最小的负整数了。

这就是为什么8位二进制,使用补码表示的范围为[-128,127]

补码存储数据的优点

(1)、避免了0的编码有两个;

(2)、符号位和有效值位可以一起处理,减法通过加法就可以实现,即简化了计算机的结构设计也提高了运算速度。

补码存储数据的缺点

(1)、不够简单直观。当然这里的不够简单直观是对我们来说的。计算机倒没什么。

下面给大家推荐一个计算补码的小工具,那就是我们经常使用的Windows计算器,只要选择好相应的数据宽度,输入你的数值,就可以观察到对应的二进制形式了:

ed7f1056-aea6-11ee-8b88-92fbcf53809c.png

2018-12-25_191046

eda1768c-aea6-11ee-8b88-92fbcf53809c.png

好了,讲了这么多,相信大家对原码、反码和补码都有一定的认识了。

审核编辑:汤梓红

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

    关注

    19

    文章

    7463

    浏览量

    87811
  • 原码
    +关注

    关注

    0

    文章

    3

    浏览量

    7149
  • 补码
    +关注

    关注

    0

    文章

    14

    浏览量

    7543
  • 符号
    +关注

    关注

    0

    文章

    55

    浏览量

    4323

原文标题:计算机基础-原码 反码 补码 基础解析

文章出处:【微信号:嵌入式那些事,微信公众号:嵌入式那些事】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    原码补码反码、有符号数、无符号数概念.pdf

    原码补码反码、有符号数、无符号数概念.pdf
    发表于 11-15 08:44

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

    首先提几个概念: 原码反码补码     原码是什么?      原码就是早期用来表示数字的一
    发表于 09-17 10:00

    原码反码补码的详细理解

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

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

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

    单片机的重要功能/组成

    1. 数制为更好描述和记忆微型计算机的地址,代码一般采用十六进制.原码,反码补码正数的反码补码
    发表于 11-18 08:49

    什么是原码反码补码

    文章目录1 前言2 什么是原码反码补码2.1 原码表示法2.2 反码表示法2.3 补码表示法
    发表于 12-15 07:00

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

      很多人都只知道计算机使用的是二进制,但很少有了解到计算机是以补码的方式进行存储数据的。  不过补码是通过原码
    发表于 04-13 17:04

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

    计算机有三种编码方式来表示同一个数: 原码:符号位加上真值的绝对值,第一位表示符号,其余位表示值。 反码:正数的反码是其本身;负数的反码
    的头像 发表于 02-12 15:28 9009次阅读

    计算机原码反码补码到底是什么

    数据在计算机里面都是以0和1存储和运算的,这是冯诺依曼体系的基础。
    的头像 发表于 02-12 16:31 1.1w次阅读

    深入探求反码补码

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

    计算机为什么要使用补码

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

    单片机(STC系列8051内核单片机)

    1. 数制为更好描述和记忆微型计算机的地址,代码一般采用十六进制.原码,反码补码正数的反码补码
    发表于 11-11 12:51 1次下载
    单片机(STC系列8051内核单片机)

    【2021-04-05】二进制中的原码反码补码与二进制数的左移右移

    二进制中原码补码与左移右移
    发表于 01-12 18:28 13次下载
    【2021-04-05】二进制中的<b class='flag-5'>原码</b><b class='flag-5'>反码</b><b class='flag-5'>补码</b>与二进制数的左移右移

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

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

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

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