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

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

3天内不再提示

计算机中CPU是如何识数的

strongerHuang 来源:Python数据科学 作者:东哥起飞 2021-10-08 16:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

先来看一个简单的问题:小孩子都知道数数:1,2,3,4,5,6,7,8,9,10,可为什么要这样数呢?为什么不是1,2,3,4,5,6,10呢?

一种比较流行的解释是因为人类有10个手指,所以人类的数字系统就是10进制的,如果这个解释成立,那么变色龙的数字系统应该是4进制,而计算机的手是单指,所以是2进制。

哈哈,开个玩笑,其实计算机在最最最最底层就是一个个开关,因此计算机系统是2进制,关于CPU的构造你可以参考《你管这破玩意叫 CPU?》:

数字 0 与正整数

0这个数字其实有非常重要的意义,可能大家都没想过这个问题,没关系,我们来看两个不同的数字系统:阿拉伯数字和罗马数字。

注意,罗马数字中没有 “0” 这个概念,你可能会想,这有什么大不了的吗?让我们来看一个例子,数字205,分别在两种系统的表示。罗马:CCV阿拉伯:2050的出现可以让阿拉伯数字系统中205这样写。

可以看到,在阿拉伯系统中数值和数字所在的位置有直接关系,这就是进位制,而在罗马数字系统则没有进位制,这使得罗马数字在表示大数值时非常困难。计算机系统中的二进制同样是进位制,数字5用二进制表示就是101。

使用 k 个bit,那么可以表示 2^k 个整数,范围从 0 到 2^k - 1,假设 k 有 8 位,那么表示范围就是 0 到 255,当然这里说的是无符号正整数。现在我们可以表示正整数了,但真正有用的计算不可避免会涉及到负数,也就是带符号整数,而这也是真正有趣的地方。

有符号整数正整数的表示非常简单,给定 k 个bit,那么我们可以表示 2^k 个数,假设k为4,那么我们可以表示16个数字。如果要考虑有符号整数呢?你可能会想这还不简单,一半一半嘛!其中一半用来表示正数,另一半用来表示负数!假设有4个比特位,如果用来表示无符号正数,就是0 ~ 15,而如果要表示有符号整数,那么其中一半给到+1 ~ +7,另一半给到-1 ~ -7,一切看最左边的 bit 是 0,如果最左边的 bit 位是 0 则表示正数,否则表示负数。

现在我们已经知道正负数是通过什么来决定的了,接下来的问题就是负数该怎么表示呢?也就是说对于比如-2,现在我们只知道其最左边的 bit 位是1,那么右边的这些 bit 到底该是多少呢?关于这一问题就三种设计方法。

方法1:正数加上负号即对应负数第一种设计方法很简单,既然0010表示+2,那么如果最左边的bit位替换成1就表示对应的负数,即1010表示-2,这种设计方法简单直接,这是最符合人类的思维的设计(不一定最好)。如果这样设计的话

你给这种非常符合人类思维的数字表示方法起了个名字,原码。这种设计下会有一个奇怪的表示:0000表示0这没什么问题,1000会表示 -0,这会导致出现-0这样的数字,其实 0 和 -0 不应该有什么区别。身为设计天才的你显然不满足于此,是不是还有其它设计方法?

方法2:翻转你觉得第一种表示方法也就是原码太原始,可以说基本上没什么设计,你突发奇想,既然0010表示+2,那么将其全部翻转,即1101来表示-2好了,你给这种表示方法也起了名字,反码。在反码表示法下,也存在-0,0000表示0,全部翻转也就是1111来表示-0,可以看到这和原码表示方法差别没那么大。

设计计算机很容易吗?到这里有的同学可能会想,计算机设计者其实怎么来表示有符号数其实都是可以的,原码可以,反码也可以,都能表示出来,设计计算机太容易了吧!你猜的没错,就是这么容易!如果你是计算机的创造者,怎么设计都可以!最初的计算机设计者真的可以有很多表示数字的方法,采用反码表示数字的计算机系统在历史上真的出现过!!!但这些表示方法不约而同都有一个问题,那就是两数相加。

不简单的两数相加我们以2 + ( -2 )为例。在原码表示法下,2为0010,-2为1010,那么计算机该怎么做2 + ( -2 )加法呢?

可是1100在原码表示法下是 -4,这与原码表示法本身是矛盾的。再来看看反码,2为0010,-2为1101,两数相加:

1111在反码表示下为-0,虽然-0不够优雅,但好歹和反码表示法本身没有矛盾,这大概就是为什么早期会有计算机采用反码表示数字的原因。在《你管这破玩意叫CPU?》一文中我们知道,计算机加法是通过加法器组合电路实现的,而这里的不管是原码还是反码,要想计算加法都不可避免的要在前面提到的加法器之上额外添加组合电路来确保有符号数相加的正确性,这无疑会增加电路设计的复杂度。人是懒惰的也是聪明的,我们就没有一种2+-2就是0(0000)的数字表达方法吗?

新的表示方法现在,对于最左边的bit位来说,0表示正数,1表示负数是没有什么异议的,这里的关键在于我们需要一种表示方法,可以让A+(-A) = 0,而且这里0的二进制也是0,如果是4个bit为的话就应该是0000。假设A=2,那么我们重点研究下2+-2 = 0(0000)的表示方法。对于2来说,很简单就是0010,对于-2来说,现在我们只能确定最左边的bit位是1。

显然 -2 应该用1110来表示,这样2+-2就真的是0了,由此推断:

从图中可以看出这种表示方法下就没有-0了。注意看-1和0,分别是1111和0000,当我们让-1(1111)加上1(0001)时,我们确实得到了0000,不过还有一个进位,实际上我们得到的是10000,但我们可以放心的忽略掉该进位。这种表示方法最美妙的地方在于《你管这破玩意叫CPU》一文中提到的加法器不用修改就可以直接计算有符号数字的加法。你可以自己试验几个数字相加就能发下这种表示方法的奇妙之处,你给这种数字表达方法起了名字,补码,这现代计算机系统所采用的数字表示方法。采用补码,如果是4个bit位,那么我们可以表示的范围是-8 ~ 7。再来仔细看一下反码和补码:

因为补码不需要表示 -0 这个奇葩,你会发现一个很有意思的规律,那就是负数的反码加上1就是对应的补码,这是计算机教科书在讲解补码时很重要的一个知识点,现在你应该知道这个知识点是怎么来的了吧!

CPU真的识数吗?就像前面提到的,现代计算机采用补码的根本原因在于这种表示方法可以简化电路设计,尽管补码对人类来说不够直观。到这里我们可以看到,在计算机科学中,最符合人类思维的设计并不一定对计算机最优,这也是最迷人的地方,人和机器毕竟不同嘛!让我们再来看下采用补码时2+-2 的计算过程:

和十进制加法一样,从右到左,如果产生进位,那么进位就要参与左边一列的计算。注意,在这个过程中加法器关心这个数字是正数还是负数了吗?答案是没有,加法器或者更具体是CPU中的ALU根本就不关心是正数还是负数,它只知道我要进行加法计算,除此之外不 CARE 任何其它信息,至于数字该采用反码还是补码这些是人类需要理解的,确切来说是编译器需要来理解的,程序员都无需关心,但程序员需要知道数据类型的表示范围。现在你能明白补码以及 CPU 是如何识数的了吧。

总结在本文我们详细讲解了CPU是如何识数这一主题,正如本文所言,CPU其实本质的上是不识数的,也不需要识数,这正是补码这一数字表示方法的优点。希望本文能对大家理解计算机系统的数字表示有所帮助。

责任编辑:haq

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

    关注

    68

    文章

    11216

    浏览量

    222930
  • 计算机
    +关注

    关注

    19

    文章

    7764

    浏览量

    92680

原文标题:CPU 是如何识数的?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    工控机与普通计算机的核心差异解析

    在工业自动化和智能制造领域,计算机设备作为核心控制单元,其选择直接影响整个系统的稳定性与可靠性。工控机与普通计算机虽同属计算设备,但其设计目标、性能侧重和应用场景存在根本性差异。准确理解这些差异,是进行正确设备选型的基础。
    的头像 发表于 11-25 14:45 1124次阅读
    工控机与普通<b class='flag-5'>计算机</b>的核心差异解析

    龙芯中科斩获2025国工业计算机大会两项殊荣

    近日,2025国工业计算机大会(CCF ICCC 2025)在云南昆明召开。本次大会由中国计算机学会主办,中国计算机学会工业控制计算机专委
    的头像 发表于 11-10 17:35 455次阅读

    【作品合集】赛昉科技VisionFive 2单板计算机开发板测评

    赛昉科技VisionFive 2单板计算机开发板测评作品合集 产品介绍: 昉·星光 2是全球首款集成了3D GPU的高性能量产RISC-V单板计算机,搭载昉·惊鸿-7110(型号:JH-7110
    发表于 09-04 09:08

    工业计算机的重要性

    于管理用于产品检查、数据记录和数据分析的运动控制系统,以提高制造生产率。例如,汽车行业从工业边缘计算机中受益匪浅,这些计算机用于自动化制造汽车所涉及的各种过程。工业边
    的头像 发表于 07-28 16:07 398次阅读
    工业<b class='flag-5'>计算机</b>的重要性

    基于飞腾CPU的安全计算机平台研制项目通过试验评审

    近日,中国城市轨道交通协会技术装备专业委员会在青岛组织召开 “基于国产芯片和操作系统的安全计算机平台研制项目” 上道试验暨结题验收评审会,基于飞腾CPU的安全计算机平台研制项目顺利通过现场试验评审
    的头像 发表于 07-23 13:59 776次阅读

    自动化计算机经过加固后有什么好处?

    让我们讨论一下部署坚固的自动化计算机的一些好处。1.温度范围宽自动化计算机经过工程设计,配备了支持宽温度范围的组件,使自动化计算解决方案能够在各种不同的极端环境运行。自动化
    的头像 发表于 07-21 16:44 419次阅读
    自动化<b class='flag-5'>计算机</b>经过加固后有什么好处?

    自动化计算机的功能与用途

    工业自动化是指利用自动化计算机来控制工业环境的流程、机器人和机械,以制造产品或其部件。工业自动化的目的是提高生产率、增加灵活性,并提升制造过程的质量。工业自动化在汽车制造中体现得最为明显,其中许多
    的头像 发表于 07-15 16:32 527次阅读
    自动化<b class='flag-5'>计算机</b>的功能与用途

    工业计算机与商用计算机的区别有哪些

    工业计算机是一种专为工厂和工业环境设计的计算系统,具有高可靠性和稳定性,能够应对恶劣环境下的自动化、制造和机器人操作。其特点包括无风扇散热技术、无电缆连接和防尘防水设计,使其在各种工业自动化场景
    的头像 发表于 07-10 16:36 516次阅读
    工业<b class='flag-5'>计算机</b>与商用<b class='flag-5'>计算机</b>的区别有哪些

    工业计算机如何设计用于冲击和振动

    探讨了使工业计算机能够抵御冲击和振动的关键设计原则和功能。了解工业环境的冲击和振动冲击是指突然的、高强度的冲击,例如重物撞击系统或运输过程突然停止。另一方面,振
    的头像 发表于 05-19 15:27 365次阅读
    工业<b class='flag-5'>计算机</b>如何设计用于冲击和振动

    一文带你了解工业计算机尺寸

    工业计算机是现代自动化、人工智能(AI)和边缘计算的支柱。这些坚固耐用的系统旨在承受恶劣的环境,同时为关键应用提供可靠的性能。然而,由于有这么多可用的外形尺寸,为您的工业计算机选择合适的尺寸可能是
    的头像 发表于 04-24 13:35 790次阅读
    一文带你了解工业<b class='flag-5'>计算机</b>尺寸

    计算机网络入门指南

    计算机网络是指将地理位置不同且具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
    的头像 发表于 04-22 14:29 1858次阅读
    <b class='flag-5'>计算机</b>网络入门指南

    CPU的各种指令和执行流程

    在集成电路设计CPU的指令是指计算机中央处理单元(CPU)用来执行计算任务的基本操作指令集。这些指令是
    的头像 发表于 04-18 11:24 1917次阅读

    Arm KleidiCV与OpenCV集成助力移动端计算机视觉性能优化

    等多种应用。然而,这些计算机视觉应用可能很难实现最优化的延迟性能和处理速度,特别是在内存大小、电池容量和处理能力有限的移动设备上难度更高。 而 Arm KleidiCV 便能在其中大显身手。该开源库利用了最新 Arm CPU
    的头像 发表于 02-24 10:15 876次阅读

    Quantinuum“Reimei”量子计算机在RIKEN正式运行

    )成功安装并全面投入运行。 此次合作,RIKEN为“Reimei”量子计算机提供了世界级的基础设施,包括为其量身定制的设计、准备及交付工作。这一里程碑式的成就不仅标志着Quantinuum在量子计算领域的持续突破,也预示着未来
    的头像 发表于 02-17 10:21 791次阅读

    云端超级计算机使用教程

    云端超级计算机是一种基于云计算的高性能计算服务,它将大量计算资源和存储资源集中在一起,通过网络向用户提供按需的计算服务。下面,AI部落小编为
    的头像 发表于 12-17 10:19 943次阅读