[导读]先来看一个简单的问题:小孩子都知道数数:1,2,3,4,5,6,7,8,9,10,可为什么要这样数呢?为什么不是1,2,3,4,5,6,10呢?一种比较流行的解释是因为人类有10个手指:所以人类的数字系统就是10进制的,如果这个解释成立,那么变色龙的数字系统应该是4进制:而计算机...
先来看一个简单的问题:小孩子都知道数数: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,这种设计方法简单直接,这是最符合人类的思维的设计(不一定最好)。如果这样设计的话,4个 bit 位能表示的所有数字就是:你给这种非常符合人类思维的数字表示方法起了个名字,原码。这种设计下会有一个奇怪的表示: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其实本质的上是不识数的,也不需要识数,这正是补码这一数字表示方法的优点。希望本文能对大家理解计算机系统的数字表示有所帮助。------------ END ------------
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。
关键字:
驱动电源
在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。
关键字:
工业电机
驱动电源
LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...
关键字:
驱动电源
照明系统
散热
根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。
关键字:
LED
设计
驱动电源
电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...
关键字:
电动汽车
新能源
驱动电源
在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...
关键字:
发光二极管
驱动电源
LED
LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。
关键字:
LED
驱动电源
功率因数校正
在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...
关键字:
LED照明技术
电磁干扰
驱动电源
开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源
关键字:
LED
驱动电源
开关电源
LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。
关键字:
LED
隧道灯
驱动电源
LED驱动电源在LED照明系统中扮演着至关重要的角色。由于LED具有节能、环保、长寿命等优点,使得LED照明在各个领域得到广泛应用。然而,LED的电流、电压特性需要特定的驱动电源才能正常工作。本文将介绍常用的LED驱动电...
关键字:
LED驱动电源
led照明
LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电源转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。
关键字:
LED
驱动电源
高压工频交流
种种迹象都在表明,半导体行业或已提前进入寒冬时期,越来越多的厂商开始扛不住了……
关键字:
LED
半导体
驱动电源
崧盛股份9日发布投资者关系活动记录表,就植物照明发展趋势、行业壁垒等问题进行分享。植物照明未来市场需求广阔崧盛股份指出,植物照明将会走向长期产业领域。主要原因有三:第一,LED植物照明赋能终端种植更具有经济价值。由于LE...
关键字:
崧盛股份
驱动电源
在当今高度发展的技术中,电子产品的升级越来越快,LED灯技术也在不断发展,这使我们的城市变得丰富多彩。 LED驱动电源将电源转换为特定的电压和电流,以驱动LED发光。通常情况下:LED驱动电源的输入包括高压工频交流电(即...
关键字:
LED
驱动电源
高压直流
人类社会的进步离不开社会上各行各业的努力,各种各样的电子产品的更新换代离不开我们的设计者的努力,其实很多人并不会去了解电子产品的组成,比如LED电源。
关键字:
LED
驱动电源
低压直流
随着科学技术的发展,LED技术也在不断发展,为我们的生活带来各种便利,为我们提供各种各样生活信息,造福着我们人类。LED驱动电源实际上是一种电源,但是它是一种特定的电源,用于驱动LED发射带有电压或电流的光。 因此,LE...
关键字:
LED
驱动电源
电流
LED灯作为一种新型节能和无污染光源,由于其特有的发光照明特性,在现代照明应用中发挥着革命性的作用。作为 LED 照明产业链中最为核心的部件之一,LED 驱动电源的驱动控制技术所存在的可靠性低、成本高等典型问题一直制约着...
关键字:
多路
LED
驱动电源
随着社会的快速发展,LED技术也在飞速发展,为我们的城市的灯光焕发光彩,让我们的生活越来越有趣,那么你知道LED需要LED驱动电源吗?那么你知道什么是LED驱动电源吗?
关键字:
LED
开关电源
驱动电源
早前有新闻称,Cree在2018年开始宣布转型高科技半导体领域,并一边逐渐脱离照明与LED相关业务,一边持续投资半导体。在今日,Cree宣布与SMART Global Holdings, Inc.达成最终协议,拟将LED...
关键字:
cree
led照明