您当前的位置:首页 > 电脑百科 > 电脑知识

二进制世界的秘密

时间:2019-09-18 08:45:12  来源:  作者:

我们都知道,计算机的底层都是使用二进制数据进行数据流传输的,那么为什么会使用二进制表示计算机呢?或者说,什么是二进制数呢?在拓展一步,如何使用二进制进行加减乘除?二进制数如何表示负数呢?本文将一一为你揭晓。

 

为什么用二进制表示

我们大家知道,计算机内部是由IC电子元件组成的,其中 CPU内存也是 IC 电子元件的一种,CPU和内存图如下

关于二进制世界的秘密

CPU

关于二进制世界的秘密

内存

CPU 和 内存使用IC电子元件作为基本单元,IC电子元件有不同种形状,但是其内部的组成单元称为一个个的引脚。有人说CPU 和 内存内部都是超大规模集成电路,其实IC 就是集成电路(Integrated Circuit)。

关于二进制世界的秘密

IC元件切面图

IC元件两侧排列的四方形块就是引脚,IC的所有引脚,只有两种电压: 0V5V,IC的这种特性,也就决定了计算机的信息处理只能用 0 和 1 表示,也就是二进制来处理。一个引脚可以表示一个 0 或 1 ,所以二进制的表示方式就变成 0、1、10、11、100、101等,虽然二进制数并不是专门为 引脚 来设计的,但是和 IC引脚的特性非常吻合。

计算机的最小集成单位为 ,也就是比特(bit),二进制数的位数一般为 8位、16位、32位、64位,也就是 8 的倍数,为什么要跟 8 扯上关系呢?因为在计算机中,把 8 位二进制数称为一个字节, 一个字节有 8 位,也就是由 8个bit构成。

为什么1个字节等于8位呢?因为 8 位能够涵盖所有的字符编码,这个记住就可以了。

字节是最基本的计量单位,位是最小单位。

用字节处理数据时,如果数字小于存储数据的字节数 ( = 二进制的位数),那么高位就用 0 填补,高位和数学的数字表示是一样的,左侧表示高位,右侧表示低位。比如 这个六位数用二进制数来表示就是100111,只有6位,高位需要用 0 填充,填充完后是00100111,占一个字节,如果用 16 位表示 就是0000 0000 0010 0111占用两个字节。

我们一般口述的 32 位和 64位的计算机一般就指的是处理位数,32 位一次可以表示 4个字节,64位一次可以表示8个字节的二进制数。

我们一般在软件开发中用十进制数表示的逻辑运算等,也会被计算机转换为二进制数处理。对于二进制数,计算机不会区分他是 图片、音频文件还是数字,这些都是一些数据的结合体。

 

什么是二进制数

那么什么是二进制数呢?为了说明这个问题,我们先把 00100111这个数转换为十进制数看一下,二进制数转换为十进制数,直接将各位置上的值 * 位权即可,那么我们将上面的数值进行转换

关于二进制世界的秘密

二进制转十进制表示图

也就是说,二进制数代表的 00100111转换成十进制就是 39,这个 39 并不是 3 和 9 两个数字连着写,而是 3 * 10 + 9 * 1,这里面的10 , 1就是位权,以此类推,上述例子中的位权从高位到低位依次就是7 6 5 4 3 2 1 0。这个位权也叫做次幂,那么最高位就是2的7次幂,2的6次幂 等等。二进制数的运算每次都会以2为底,这个2 指得就是基数,那么十进制数的基数也就是 10 。在任何情况下位权的值都是数的位数 - 1,那么第一位的位权就是 1 - 1 = 0, 第二位的位权就睡 2 - 1 = 1,以此类推。

那么我们所说的二进制数其实就是 用0和1两个数字来表示的数,它的基数为2,它的数值就是每个数的位数 * 位权再求和得到的结果,我们一般来说数值指的就是十进制数,那么它的数值就是 3 * 10 + 9 * 1 = 39。

 

移位运算和乘除的关系

在了解过二进制之后,下面我们来看一下二进制的运算,和十进制数一样,加减乘除也适用于二进制数,只要注意逢 2 进位即可。二进制数的运算,也是计算机程序所特有的运算,因此了解二进制的运算是必须要掌握的。

首先我们来介绍移位运算,移位运算是指将二进制的数值的各个位置上的元素坐左移和右移操作,见下图

关于二进制世界的秘密

移位过程

上述例子中还是以 39 为例,我们先把十进制的39 转换为二进制的 0010 0111,然后向左移位 <<一个字节,也就变成了0100 1110,那么再把此二进制数转换为十进制数就是上面的78, 十进制的78 竟然是 十进制39 的2倍关系。我们在让0010 0111左移两位,也就是1001 1100,得出来的值是 156,相当于扩大了四倍!

因此你可以得出来此结论,左移相当于是数值扩大的操作,那么右移 >>呢?按理说右移应该是缩小 1/2,1/4 倍,但是39 缩小二倍和四倍不就变成小数了吗?这个怎么表示呢?请看下一节

 

便于计算机处理的补数

刚才我们没有介绍右移的情况,是因为右移之后空出来的高位数值,有 0 和 1 两种形式。要想区分什么时候补0什么时候补1,首先就需要掌握二进制数表示负数的方法。

二进制数中表示负数值时,一般会把最高位作为符号来使用,因此我们把这个最高位当作符号位。符号位是 0 时表示正数,是 1 时表示负数。那么 -1 用二进制数该如何表示呢?可能很多人会这么认为:因为 1 的二进制数是0000 0001,最高位是符号位,所以正确的表示 -1 应该是1000 0001,但是这个答案真的对吗?

计算机世界中是没有减法的,计算机在做减法的时候其实就是在做加法,也就是用加法来实现的减法运算。比如 100 - 50 ,其实计算机来看的时候应该是 100 + (-50),为此,在表示负数的时候就要用到二进制补数,补数就是用正数来表示的负数。

为了获得补数,我们需要将二进制的各数位的数值全部取反,然后再将结果 + 1 即可,先记住这个结论,下面我们来演示一下。

关于二进制世界的秘密

-1 取反过程

具体来说,就是需要先获取某个数值的二进制数,然后对二进制数的每一位做取反操作(0 ---> 1 , 1 ---> 0),最后再对取反后的数 +1 ,这样就完成了补数的获取。

补数的获取,虽然直观上不易理解,但是逻辑上却非常严谨,比如我们来看一下 1 - 1 的这个过程,我们先用上面的这个 1000 0001(它是1的补数,不知道的请看上文,正确性先不管,只是用来做一下计算)来表示一下

关于二进制世界的秘密

1 - 1 分析图

奇怪,1 - 1 会变成 130 ,而不是0,所以可以得出结论 1000 0001表示 -1 是完全错误的。

那么正确的该如何表示呢?其实我们上面已经给出结果了,那就是 1111 1111,来论证一下它的正确性

关于二进制世界的秘密

1 - 1 正确的分析图

我们可以看到 1 - 1 其实实际上就是 1 + (-1),对 -1 进行上面的取反 + 1 后变为 1111 1111, 然后与 1 进行加法运算,得到的结果是九位的1 0000 0000,结果发生了溢出,计算机会直接忽略掉溢出位,也就是直接抛掉 最高位 1 ,变为0000 0000。也就是 0,结果正确,所以1111 1111表示的就是 -1 。

所以负数的二进制表示就是先求其补数,补数的求解过程就是对原始数值的二进制数各位取反,然后将结果 + 1

当然,结果不为 0 的运算同样也可以通过补数求得正确的结果。不过,有一点需要注意,当运算结果为负的时候,计算结果的值也是以补数的形式出现的,比如 3 - 5 这个运算,来看一下解析过程

关于二进制世界的秘密

3 - 5 的解析过程

3 - 5 的运算,我们按着上面的思路来过一遍,计算出来的结果是 1111 1110,我们知道,这个数值肯定表示负数,但是负数无法直接用十进制表示,需要对其取反+ 1,算出来的结果是 2,因为1111 1110的高位是 1,所以最终的结果是 -2。

编程语言的数据类型中,有的可以处理负数,有的不可以。比如 C语言中不能处理负数的 unsigned short类型,也有能处理负数的short类型 ,都是两个字节的变量,它们都有 2 的十六次幂种值,但是取值范围不一样,short 类型的取值范围是 -32768 - 32767 , unsigned short 的取值范围是 0 - 65536。

仔细思考一下补数的机制,就能明白 -32768 比 32767 多一个数的原因了,最高位是 0 的正数有 0 ~ 32767 共 32768 个,其中包括0。最高位是 1 的负数,有 -1 ~ -32768 共 32768 个,其中不包含0。0 虽然既不是正数也不是负数,但是考虑到其符号位,就将其归为了正数。

 

算数右移和逻辑右移的区别

在了解完补数后,我们重新考虑一下右移这个议题,右移在移位后空出来的最高位有两种情况 0 和 1。当二进制数的值表示图形模式而非数值时,移位后需要在最高位补0,类似于霓虹灯向右平移的效果,这就被称为逻辑右移

关于二进制世界的秘密

逻辑右移示意图

将二进制数作为带符号的数值进行右移运算时,移位后需要在最高位填充移位前符号位的值( 0 或 1)。这就被称为算数右移。如果数值使用补数表示的负数值,那么右移后在空出来的最高位补 1,就可以正确的表示1/2,1/4,1/8等的数值运算。如果是正数,那么直接在空出来的位置补 0 即可。

下面来看一个右移的例子。将 -4 右移两位,来各自看一下移位示意图

关于二进制世界的秘密

逻辑右移和算数右移示意图

如上图所示,在逻辑右移的情况下, -4 右移两位会变成 63, 显然不是它的 1/4,所以不能使用逻辑右移,那么算数右移的情况下,右移两位会变为-1,显然是它的 1/4,故而采用算数右移。

那么我们可以得出来一个结论:左移时,无论是图形还是数值,移位后,只需要将低位补 0 即可;右移时,需要根据情况判断是逻辑右移还是算数右移。

下面介绍一下符号扩展:将数据进行符号扩展是为了产生一个位数加倍、但数值大小不变的结果,以满足有些指令对操作数位数的要求,例如倍长于除数的被除数,再如将数据位数加长以减少计算过程中的误差。

以8位二进制为例,符号扩展就是指在保持值不变的前提下将其转换成为16位和32位的二进制数。将0111 1111这个正的 8位二进制数转换成为 16位二进制数时,很容易就能够得出0000 0000 0111 1111这个正确的结果,但是像1111 1111这样的补数来表示的数值,该如何处理?直接将其表示成为1111 1111 1111 1111就可以了。也就是说,不管正数还是补数表示的负数,只需要将 0 和 1 填充高位即可。

 

逻辑运算的窍门

掌握逻辑和运算的区别是:将二进制数表示的信息作为四则运算的数值来处理就是算数,像图形那样,将数值处理为单纯的01的罗列就是逻辑

计算机能够处理的运算,大体可分为逻辑运算和算数运算,算数运算指的是加减乘除四则运算;逻辑运算指的是对二进制各个数位的 0 和 1分别进行处理的运算,包括逻辑非(NOT运算)、逻辑与(AND运算)、逻辑或(OR运算)和逻辑异或(XOR运算)四种。

逻辑非指的是将 0 变成 1,1 变成 0 的取反操作•逻辑与指的是"两个都是 1 时,运算结果才是 1,其他情况下是 0"•逻辑或指的是"至少有一方是 1 时,运算结果为 1,其他情况下运算结果都是 0"•逻辑异或指的是 "其中一方是 1,另一方是 0时运算结果才是 1,其他情况下是 0"

关于二进制世界的秘密

与或非异或真值表

掌握逻辑运算的窍门,就是要摒弃二进制数表示数值这一个想法。大家不要把二进制数表示的值当作数值,应该把它看成是 开关上的 ON/OFF

文章参考:

《程序是怎样跑起来的》

< END >



Tags:二进制   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
0. 简介 在Linux系统的可执行文件(ELF文件)中,开头是一个文件头,用来描述程序的布局,整个文件的属性等信息,包括文件是否可执行、静态还是动态链接及入口地址等信息;如下图所示: 程...【详细内容】
2020-09-14  Tags: 二进制  点击:(127)  评论:(0)  加入收藏
操作系统 Oracle Linux Server release 6.3 数据库 Mysql5.6 #添加mysql用户和组 [root@localhost app]# groupadd mysql [root@localhost app]# useradd -g mysql mysql [r...【详细内容】
2020-07-02  Tags: 二进制  点击:(197)  评论:(0)  加入收藏
这些简单的命令和工具可以帮助你轻松完成分析二进制文件的任务。 来源:https://linux.cn/article-12187-1.html 作者:Gaurav Kamathe 译者:Xingyu.Wang“这个世界上有 10 种人...【详细内容】
2020-05-05  Tags: 二进制  点击:(39)  评论:(0)  加入收藏
Ubuntu换源由于Ubuntu官方的源是国外的,所以速度很慢,要把它换成国内的镜像站,那样,不管是更新、还是安装软件,都是比较快的。网易源http://mirrors.163.com/中科大源http://mir...【详细内容】
2020-03-25  Tags: 二进制  点击:(110)  评论:(0)  加入收藏
如何区分Linux中的源码包和二进制包Linux下的软件包可分为两种:(1)源码包。(2)二进制包。1、源码包简单介绍:实际上,源码包就是源代码程序的集合。由程序员们通过特定的语言编...【详细内容】
2020-02-06  Tags: 二进制  点击:(54)  评论:(0)  加入收藏
我们都知道,计算机的底层都是使用二进制数据进行数据流传输的,那么为什么会使用二进制表示计算机呢?或者说,什么是二进制数呢?在拓展一步,如何使用二进制进行加减乘除?二进制数如何...【详细内容】
2019-09-18  Tags: 二进制  点击:(172)  评论:(0)  加入收藏
最近在工作中遇到一项新需求,项目需要对接小程序内容安全接口,该接口可根据用户发送的请求自动检测、审核内容,主要用于过滤涉政、不健康言论和鉴别黄图。官方有三个内容安全接...【详细内容】
2019-09-05  Tags: 二进制  点击:(2067)  评论:(0)  加入收藏
在讨论如何进行IP地址与二进制之间的转换前, 有必要解释一下IP地址与二进制的概念IP IP协议是网络层的一个协议, 是能使连接到网上的所有计算机网络实现相互通信的一套规则,...【详细内容】
2019-08-30  Tags: 二进制  点击:(776)  评论:(0)  加入收藏
相信有很多很多人都知道二进制,八进制,十进制,十六进制,那你知道这些进制都有什么作用呢?以及个禁止之间是怎么转换的呢?那么今天我就来说说什么是二进制,什么是八进制,什么是十进...【详细内容】
2019-08-12  Tags: 二进制  点击:(292)  评论:(0)  加入收藏
要回答这个问题,首先让我们了解一下二进制概述以及其发展 。进制是逢2进位的进位制,0、1是基本算符;计算机运算基础采用二进制。电脑的基础是二进制,那么,什么是二进制呢,为什...【详细内容】
2019-07-25  Tags: 二进制  点击:(1592)  评论:(0)  加入收藏
▌简易百科推荐
回答这个问题前首先要了解一度电的定义一度电= 1000W&middot;h ,是一个能量单位,一个功率为1000w的设备持续运作一小时就会消耗1度电。所以台式机多少时间一度电完全取决于台...【详细内容】
2021-12-20  数码榜    Tags:台式电脑   点击:(5)  评论:(0)  加入收藏
你是不是很多时候都会紧急冲向电源插座以拯救笔记本电脑的电量?很多时候由于附近没有方便的插座,一是会误事,二是会导致尴尬。幸运的是,现代笔记本电脑比前辈高效得多。如今,即...【详细内容】
2021-12-16  趣玩公社    Tags:电池   点击:(18)  评论:(0)  加入收藏
电脑在我们生活中的重要性不言而喻。如何保证自己的电脑流畅好用,对于很多用户来说都非常重要。作为一个理科男和IT从业者,对于自己的电脑还是非常在意的,会定期的进行整理,保持...【详细内容】
2021-12-09  小伊评科技    Tags:电脑   点击:(13)  评论:(0)  加入收藏
大家好,我是良许。不管我们使用什么操作系统,无论是 Windows、macOS 还是 Linux ,里面都安装了许多软件、驱动程序和固件。但是,这三者概念有区别呢?我在朋友圈做了个小调查,发现...【详细内容】
2021-11-30  良许Linux    Tags:固件   点击:(11)  评论:(0)  加入收藏
澎湃问吧世界著名密码史学家戴维&middot;卡恩曾说:“人类使用密码的历史几乎与使用文字的时间一样长”,这意味着人类密码领域的较量已近五千年。提及“密码”一词,大多数人会想...【详细内容】
2021-11-24    澎湃新闻  Tags:密码   点击:(16)  评论:(0)  加入收藏
由于去中心化域名和账户体系可以承载应用、网站和用户身份,因此有理由相信,这是 Web3 世界中不可或缺的一环。撰文:潘致雄如果回忆一下初次进行的加密货币转账时的体验,特别是在...【详细内容】
2021-11-03  链闻ChainNews    Tags:ENS   点击:(26)  评论:(0)  加入收藏
 文件系统(File System)是计算机系统必不可少的组成部分,可以说除了部分结构简单的单片机系统之外,文件系统是支撑每一个计算机系统运行的最重要的支撑,无论是操作系统、应用程...【详细内容】
2021-11-01  欧工玩转嵌入式  CSDN  Tags:FAT32   点击:(31)  评论:(0)  加入收藏
SDS 2.0时代进化达尔文的《进化论》认为,地球上现存的所有生物都是自然选择的结果,生物只有适应环境的变化,才能得到生存和进化。回望到企业存储,一个常做常新的行业,从上古结绳...【详细内容】
2021-10-28  ExponTech   企鹅号  Tags:SDS   点击:(35)  评论:(0)  加入收藏
在昨天的微信《远程办公危机四伏,到底该pick谁给你保驾护航?》中介绍了远程员工应该具备的四大安全工具,今天继续分享干货:05 双因子令牌在理想的情况下,每个人都会对所有的关键...【详细内容】
2021-10-26    计算机世界  Tags:远程办公   点击:(32)  评论:(0)  加入收藏
今天几乎所有的数字显示设备都基于某种类型的 RGB(红、绿、蓝)颜色模型。RGB 是表示人类可以看到的大多数颜色的最有效方式(有一些颜色不能很好地产生,但这是另一个讨论)。相机...【详细内容】
2021-10-09  懒懒散散的程序员    Tags:RGB   点击:(50)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条