欧博电脑版下载:程序员需要领会的硬核知识之二进制

admin 4周前 (06-07) 科技 3 0

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

为什么用二进制示意

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

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

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 这个数转换为十进制数看一下,二进制数转换为十进制数,直接将列位置上的值 * 位权即可,那么我们将上面的数值举行转换

欧博电脑版下载:程序员需要领会的硬核知识之二进制 第1张

也就是说,二进制数代表的 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 进位即可。二进制数的运算,也是盘算机程序所特有的运算,因此领会二进制的运算是必须要掌握的。

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

欧博电脑版下载:程序员需要领会的硬核知识之二进制 第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 即可,先记着这个结论,下面我们来演示一下。

欧博电脑版下载:程序员需要领会的硬核知识之二进制 第3张

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

补数的获取,虽然直观上不易明了,然则逻辑上却异常严谨,好比我们来看一下 1 - 1 的这个历程,我们先用上面的这个 1000 0001(它是1的补数,不知道的请看上文,准确性先不管,只是用来做一下盘算)来示意一下

欧博电脑版下载:程序员需要领会的硬核知识之二进制 第4张

新鲜,1 - 1 会酿成 130 ,而不是0,以是可以得出结论 1000 0001 示意 -1 是完全错误的。

那么准确的该若何示意呢?实在我们上面已经给出效果了,那就是 1111 1111,来论证一下它的准确性

欧博电脑版下载:程序员需要领会的硬核知识之二进制 第5张

我们可以看到 1 - 1 实在实际上就是 1 + (-1),对 -1 举行上面的取反 + 1 后变为 1111 1111, 然后与 1 举行加法运算,获得的效果是九位的 1 0000 0000,效果发生了溢出,盘算机遇直接忽略掉溢出位,也就是直接抛掉 最高位 1 ,变为 0000 0000。也就是 0,效果准确,以是 1111 1111 示意的就是 -1 。

以是负数的二进制示意就是先求其补数,补数的求解历程就是对原始数值的二进制数列位取反,然后将效果 + 1

固然,效果不为 0 的运算同样也可以通过补数求得准确的效果。不外,有一点需要注重,当运算效果为负的时刻,盘算效果的值也是以补数的形式泛起的,好比 3 - 5 这个运算,来看一下剖析历程

欧博电脑版下载:程序员需要领会的硬核知识之二进制 第6张

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,类似于霓虹灯向右平移的效果,这就被称为逻辑右移

欧博电脑版下载:程序员需要领会的硬核知识之二进制 第7张

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

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

欧博电脑版下载:程序员需要领会的硬核知识之二进制 第8张

如上图所示,在逻辑右移的情形下, -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"

欧博电脑版下载:程序员需要领会的硬核知识之二进制 第9张

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

欧博电脑版下载:程序员需要领会的硬核知识之二进制 第10张

,

Allbet

www.xaks68887722.com欢迎进入欧博开户平台(Allbet Gaming),欧博开户平台开放欧博(Allbet)开户、欧博(Allbet)代理开户、欧博(Allbet)电脑客户端、欧博(Allbet)APP下载等业务

皇冠体育声明:该文看法仅代表作者自己,与本平台无关。转载请注明:欧博电脑版下载:程序员需要领会的硬核知识之二进制

网友评论

  • (*)

最新评论

文章归档

站点信息

  • 文章总数:537
  • 页面总数:0
  • 分类总数:8
  • 标签总数:973
  • 评论总数:174
  • 浏览总数:3679