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

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

3天内不再提示

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

jf_78858299 来源:小余的自习室 作者:小余的自习室 2023-03-30 09:59 次阅读

机器数和真值

机器数

一个数在计算中的二进制表示形式,叫做这个数的机器数,机器数是带符号的,正数为0,负数为1。

如 :

  • 十进制数+3,机器数就是00000000000000000000000000000011
  • 十进制数-3,那机器数不就是10000000000000000000000000000011 ,想当然~ 实际是11111111111111111111111111111101,这个数是-3的补码形式,因为负数在机器中是以补码的形式存在的。

真值

真正数学意义上的数值。因为第一位是符号位,所以机器数形式值就不等于真正的数值。 如:

00000000000000000000000000000011->+3
11111111111111111111111111111101->-3

当然前面的举例是针对有符号数来说的,对于无符号数,机器数和真值是一致的。

无符号数和有符号数机器数和真值换算方式

无符号数换算:

用一个函数 B2Uw (Binary to Unsigned)的缩写,长度为w来表示:

图片

如4位二进制数:

图片

图片

图片

图片

有符号数换算方式

前面我们说过有符号数在计算机中的机器数是以补码的形式存在的,其换算公式 B2Tw (Binary to Two`s complement):

图片

如下面4位二进制数:

图片

图片

图片

图片

当然还有一种大众所知的方式:就是使用原码,反码,补码变换规律

原码,反码,补码

计算机机器数运行效率问题

首先要清楚我们计算机中统一使用的是加法计算,对你没听错。。计算机居然不会减法,哈哈。

在补码概念提出之前,我们来举几个例子:

图片

可以看到在有负数参与的加法计算得到的结果是有误的。

如果需要得到正确的结果,计算器不得不是有其他方式去得到,这样必然就会影响运行效率。

为了解决负数在计算机中运行效率问题,科学家们提出了补码的概念。

补码:

使用补码获取真值

那如何使用补码规则获取一个负数的真值呢?

图片

假设我们从计算中获取了一个二进制为10000001的8位机器数,如何获取其真值。

  • step1 .首先10000001是指一个补码形式机器数,实际上在计算机系统中,所有的整数都是以补码的形式存在,包括正数和负数,正数的补码就是原码自己所以统一使用补码来存储。
  • step2 .按照补码到反码规则,在补码10000001基础上-1,将得到反码:10000000
  • step3 .按照反码到原码规则,将符合位不变,反码取反即可得原码:11111111
  • step4 .按照原码的真值概念:原码的符合位为符号位,不参与计算,其他位为真值的绝对值即可:- 127

图片

补码的计算逻辑

我们回到前面分析运行效率时举的正正,负负,正负相加例子:

这里我们使用补码再来计算下:

图片

可以看出,将符号以补码的形式存储在计算机中之后就可以使用加法来代替减法的操作,大大提高了计算机的运行效率。

补码的设计来源

通过文章前半部分介绍,相信你已经对补码有了一个比较全面的概念了,但是补码是怎么设计出来的呢?

数学里面有一个“补数”概念。

补数

生活中有很多例子,只要是 带周期性的事务性质的都可以用补数来形容 。比如:时钟或者转盘等。

图片

假设当前时间是2点,你要让时钟显示到12点,那么有两个方式。

  • 方式1 .将指针顺时针拨动10个点,做的是 加法 :+10。
  • 方式2 .将指针逆时针拨动2个点,做的是 减法 :-2。

对于时钟来说,不管你是方式1的加法运行还是方式2的减法运算,指针都指向了12点,实现的效果是一致的, 那我们就说+10和-2是两个补数,它们的绝对值之和12就是补数的模

这种规律也被应用到计算机二进制中 。下面我们使用一个例子来看:

假设要计算:(5)+(-1) = 5+(+?)

  • 5在计算机中的原码: 0 0 0 0 0 1 0 1
  • -1在计算机中的原码:1 0 0 0 0 0 0 1

要将这个减法操作变为加法操作,首要任务就是找到模,然后得到-1的正补数相加即可

来看我们的时钟,每拨动12格为一个周期,就是说复原了,一样的, 8bit位范围是-128~127 ,(注意这里我们为了精简分析使用的是8位来测试计算,实际计算机中场景一般都是32位格式4个字节或者64位计算)所以 其一个周期就是256,也就是其模就是256 (1 0000 0000),不管你是加上256还是减少256,在二进制中,值都是不变的,因为最后一位是溢出位,不会去计算。

通过以上分析我们找到了-1(1 0 0 0 0 0 0 1)的模为256(1 0000 0000),-1的补数为(+255):0 1111 1111

这样就将5-1这个减法运算变更为了5+255这个加法操作

下面我们来看5+255:

5:0000 0101

255:0 1111 1111 

二进制相加后:1 0000 0100 ->最高位溢出丢弃所以结果为4.

看到是不是和5-1结果一样呢?。

其实计算机中的补码也是这个模式: 找到一个与负数等价的正补数,使用该正补数代替负数,从而将减法运算替换为两个正数加法运算 ,补码的出现与运算器的电路设计有关,从设计者的角度看,希望尽可能简化电路设计和计算复杂度。而使用正补数代替负数就可以消除减法器,实现简化电路的目的。

我们下期见。

参考:为什么计算机中的负数要用补码表示?

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

    关注

    2

    文章

    796

    浏览量

    41746
  • 计算机
    +关注

    关注

    19

    文章

    7534

    浏览量

    88532
  • 十进制
    +关注

    关注

    0

    文章

    67

    浏览量

    13262
  • 补码
    +关注

    关注

    0

    文章

    14

    浏览量

    7568
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    计算机中不同硬件对Hz的定义相同吗

    Hz(赫兹)通常的定义是波形每秒钟变化或振动的次数,在计算机中不同硬件对Hz的定义各不相同。CPU:Hz用来表示时钟频率。目前的CPU通常以MHz和GHz作为计量单位。显示器:在显示器中有三个频率
    发表于 09-08 06:10

    微型计算机中采用的逻辑元件是什么

    第7部分 计算机硬件 单选(1) .[B]计算机向使用者传送计算、处理结果的设备称为______。(A) 输入设备(B) 输出设备(C) 存储设备(D) 微处理器(2) .[C]目前微型计算机
    发表于 09-15 07:43

    单片机的重要功能/组成

    1. 数制为更好描述和记忆微型计算机的地址,代码一般采用十六进制.原码,反码和补码正数的反码和补码均与原码相同,负数的反码为:保持原码符号位不变,数值位均取反;
    发表于 11-18 08:49

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

      补码的正数和反码以及原码,普通二进制的一致,没有区别,而负数实际是在原有负数的反码上面加1  正数的原码,反码,补码是相同的  为什么要有这些码?  原码不方便进行
    发表于 04-13 17:04

    个人计算机中的串行端

    【LabVIEW从入门到精通】4.1.5 个人计算机中的串行端口
    发表于 01-08 15:43 0次下载

    从5个方面解析计算机中的字符编码概念

    字符编码是计算机编程不可回避的问题,不管你用 Python2 还是 Python3,亦或是 C++, Java 等,我都觉得非常有必要厘清计算机中的字符编码概念。
    的头像 发表于 01-16 09:08 7967次阅读
    从5个方面<b class='flag-5'>来</b>解析<b class='flag-5'>计算机中</b>的字符编码概念

    整数如何在计算机中表示

    我们日常用的整数都是十进制数(Decimal),也就是我们通常所说的逢十进一。因为我们人类有十根手指,所以自然而然地会想到采用十进制的计数和计算方式。然而,现在几乎所有计算机都采用二进制数(Binary)编码方式,所以我们日常所用到的整数如果
    发表于 06-11 17:47 0次下载
    整数如何在<b class='flag-5'>计算机中表示</b>

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

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

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

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

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

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

    DRAM在计算机中的应用

    DRAM(Dynamic Random Access Memory,动态随机存取存储器)在计算机系统扮演着至关重要的角色。它是一种半导体存储器,用于存储和快速访问数据,是计算机主内存的主要组成部分。以下是对DRAM在
    的头像 发表于 07-24 17:04 1497次阅读

    边沿触发器在计算机中的应用

    边沿触发器在计算机中的应用极为广泛,它们作为数字电路的基本单元,对于实现计算机内部的时序控制、数据存储与传输、以及复杂逻辑功能等方面起着至关重要的作用。以下将从边沿触发器的定义、特点、工作原理及其在
    的头像 发表于 08-12 14:20 683次阅读

    计算机中总线的作用是什么

    计算机中,总线(Bus)扮演着极其重要的角色,它是计算机内部各功能部件之间传送信息的公共通信干线。总线不仅连接了计算机的各个核心组件,还确保了数据、指令和控制信号的高效、准确传输。
    的头像 发表于 08-26 15:57 1816次阅读