二进制是什么意思例子(二进制转化为十进制)

Codeegg的第592条推文作者:HuYounger博客:http://rkhcy.github.io/2019/03/12/binary/?。utm _ m

Codeegg的第592条推文

二进制是什么意思例子(二进制转化为十进制)

作者:HuYounger

博客:http://rkhcy.github.io/2019/03/12/binary/?。utm _ medium =网站

什么是二进制?

二进制是一套计数方法,每个位置的数有两种可能(0-1);二进制是计算机的执行语言,但这种计数方法早在计算机出现之前就存在了,最早可以追溯到古埃及。在日常生活中,我们使用十进制,每个位置的数字有10种可能(0-9)。在了解二进制之前,我们先来看看十进制是如何工作的。

比如十进制的101;这里有两个1,代表不同的意思。左边的代表100,右边的代表1,因为左边的是百,而右边的是个单位。同样,中间的零是十进制的。所以十进制101是“100位数是1,10位数是0,1位数是1”,这里的位数对应的是10的幂:

二进制数字的个数对应于2的幂:

所以二进制下的 101 代表 5。下图是二进制的前十位:所以二进制的101代表5。下图显示了二进制的前十位:

二进制转换

计算机是以二进制运行的,但我们在键盘上输入的不是二进制,而是字母、数字(十进制)、汉字等。计算机是怎么知道把这些内容转换成二进制的?计算机是由人设计的。在我们知道计算机把我们输入的东西转换成二进制之前,我们先简单看一下十进制和二进制之间的转换。这里的例程是:

计算出2的n次方不大于要表示的值;

从要表示的值中减去2的n次方得到剩余值,重复步骤1,直到最后剩下0。

比如如何把十进制的107转换成二进制,先找出2的n次方不大于107,算出n = 6,用107减去2的6次方得到43;重复一遍后:

如果使用该位,则用1表示,否则用0表示。所以107用二进制表示为:01101011。

二进制到十进制是相反的过程,比如01011001到十进制:

什么是一点?

计算机有数十亿个超小型数字电路,由开关组成,开关的状态只有开或关,分别用二进制表示1和0。回想那些年我们跳过的数字电路课,依稀记得通过调整部分电路开关来决定是否让电流通过,可以看到相应开关上的红灯是否亮起。

计算机中最小的存储单位是二进制数,也叫位,只能存储0或1;为了存储额外的信息(例如一个更大的十进制数),计算机通过将这些位串联起来来完成它。这就是它令人敬畏的地方。只要有足够多的开关,就可以通过这些0和1代表任何东西。8位串联连接称为字节。一个字节可以代表256种不同的可能性(2的8次方),两个字节可以代表65536种不同的可能性(2的16次方),只需要16个开关。

记忆是如何工作的?

计算机运行的二进制存储在内存中,这里的内存英文名称是随机存取存储器(RAM),那么它的结构是怎样的呢?你可以把内存想象成一个大书架,它有几十亿层……每一层都有一个编号,每一层的编号称为一个地址,每一层有8位用于存储数据。如下所示:

同时,存在用于执行存储器操作的处理器和存储器控制器。内存控制器负责从处理器接收指令,并对内存执行读写操作。它可以直接操作内存大书架的每一层,如下:

这里的直接操作有多牛逼?意思是我们可以先访问地址0的数据,然后直接访问编号12345的数据,不用在RAM的大书架里一个一个地寻址编号12345。这也是随机存取存储器(RAM)这个名字的由来——“立即访问内存中的随机地址”。

虽然内存控制器可以在相距较远的内存地址之间快速切换,但仍然倾向于访问相邻地址的内存,计算机在这方面做了优化。处理器有一个缓存,用于存储最近从RAM访问的数据副本,如下所示:

处理器从缓存中读取数据的速度比RAM快,所以缓存的出现帮助我们节省了时间。当处理器向内存处理器发出访问某个内存地址的指令时,内存处理器实际上将该地址的相邻地址的内容返回给处理器,处理器将这些内容存储在缓存中。

如果处理器想要依次访问地址951、952、953、954…当第一次读取地址951时,所有需要的内容都会被取出并放入处理器的缓存中,然后通过快速缓存读取来获得地址952、953、954的读取。

但是如果处理器访问的地址是951,321,146……那么这个时候缓存就帮不上忙了,内存管理器每次都要老老实实的去RAM区取数据,当然速度会比上面慢。

数字的二进制表示

以上,我们已经知道如何用二进制来表示十进制,日常生活中使用的数的范围在计算机中可以用4或8个字节(32或64位)来表示:

4位可以表示的数字范围:2147483648 ~ 2147483647。

可以用8位表示的数字范围:9223372036854775808 ~ 922337203685477807

二进制也可以用来表示分数、小数和负数:

分数:分别存储两个数:分子和分母。

小数:两个数分开存储:去掉小数点后的数;小数点出现的地方

负数:二进制中最左边的位代表符号,0代表正数,1代表负数;

二进制表示字符

我理解计算机如何用二进制表示数字(十进制),那么计算机如何用二进制表示字符呢?计算机使用编码。编码是数字和字符之间的一组映射关系,有许多不同的编码格式,例如,ASCII(美国信息交换标准码)。ASCII码表可以翻译数字,大小写字母,以及一些常用的特殊符号。有了这套规则,计算机将知道如何处理我们输入的内容:

假设我们输入的内容是NICE,我们先通过ASCII编码表转换成十进制如下:

78 73 67 69

转换为二进制:

01001110 01001001 01000011 01000101

观察上面的例子,发现

一个字符需要8位来表示,也就是1个字节。

二进制意味着所有字母都以0开头。

好像表示一个字符只需要7位,第一位总是0,给人感觉是浪费1位。所以设计这个表的时候没发现这个bug吗?再看上面的ASCII表,我们发现表中遗漏了很多其他的特殊符号,比如é等等。计算机如何用二进制表示这些符号?原来设计的ASCII编码表只用了7位,所以有128种可能。通过使用第一位,ASCII编码表可以加倍和扩展。

还有其他的字符编码方式,比如Unicode编码表,可以用来表示世界各国的字符。不同的是每个字符占用2 byte(所以理论上最多能代表2的16次方(即65536个字符)。基本满足各种语言的使用。实际上,当前版本的Unicode代码并没有完全使用这种16位编码,而是保留了大量的空空格以供特殊使用或将来扩展)。这些代码的核心思想是一样的:建立一套规则作为抽象层来简化我们的字符和二进制之间的转换。

最近的文章:

Python之父再次为996发声,而我们呢?

颤振入门指的是华北常见的布局。

程序员写墓志铭…

今天的问题:

你记得二进制吗?

在codeegg后台回复“社区”即可加入学习群。

你在看吗?

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/412478.html

发表回复

登录后才能评论