04|二进制

2019-11-15  本文已影响0人  井润

知道上篇Blog讲到的内容主要是布尔逻辑和逻辑门,留下了一个疑问就是布尔的值只有true和false用来求对应的逻辑运算,那么随即而来的计算机中如何存储信息?

其中本文涉及到的知识点有:

01|计算机中如何存储与表示数字

虽然说计算机中用来存储宇表示数字的内容与数学相关,但是对应的要求的数学水平并不高,因此我们学习起来的时候,不必过于担心!

计算机中用来存储和表示数字的技术就是 二进制,对的就是使用的二进制,虽然很多没学过计算机,但是可能对二进制有些概念的人可能会对二进制很好奇,接下来听我慢慢讲:

二进制中的一个进制就代表一个数,对应的其他内容通过 加位数 进行表示,像 十进制(我们生活中常用到的0~9就属于十进制数的一部分) 逢十进一,而对应的二进制则是 逢二进一!

例如我们的263,如果说通过十进制进行拆分的话,如下所示:

263 = 2*100 + 6*10 + 3*1

对应的乘数为100,10,1 每个乘数为右侧乘数的两倍!

以上的内容我们常常称之为: 逢十进一表示法/基于十的表示法或十进制!

此时你可能会心生疑惑,你这标题明明讲着不是二进制码,一个劲地讲解十进制是不是不太好啊!

你心中有这样的疑问对于我而言其实并不意外,我说十进制是更贴切我们的生活的角度来看待的,二进制又是如何体现的呢?

比如说:二进制的 101

1*4 + 0*2 + 1*1 = 5

其实二进制的101就是我们十进制的5 每个乘数为右侧成熟的两倍! 可以简单理解为 越往前的乘数 是后面乘数的 +1 次方!

就拿二进制 10110111 进行计算,我们好好分析一番,如下所示:

128 64 32 16 8 4 2 1
1 0 1 1 0 1 1 1

为什么是这样的,因为10110111有八位对应的转换成为10进制数为 2^7 = 128

我们通过转换并且依次相加对应的结果为:

128 + 0 + 32 + 16 + 8 + 4 + 2 + 1 = 183 

结果就是如此!

其中二进制中能够表示的最大的正数为255,但是二进制有256个数 2^8 范围也就是 0~255

02|正数 负数 正数 浮点数的表示

既然说到这里了,我们不得不提的概念就是 bytes 就是所谓的字节的意思, 1bytes = 8bit 对应的bit就是位的意思!

一个字节等于8位也是这么换算来的!

我们的存储单位kb,mb,gb,tb就是通过换算来的

对应的我们一些应用安装包中的 32位/64位 也就是意味着一个块块处理数据的大小,32位或者64位,显然后者处理数据更加大一点! 对应的32位能够表示的最大的数为 差不多为 43亿 用二进制表示如下所示:

11111111111111111111111111111111

然后慢慢通过换算的得来的!

1tb = 2^10gb  
1gb = 2^10mb
1mb = 2^10kb

如果说应用领域的话,其实我们常常看到的屏幕色彩之所以非常细腻,就是32位色彩的应用,能够表示几百万种颜色组合,应该对应的色彩更加细腻清晰!

问题来了! 既然你说了使用二进制来表示数字,那么刚刚仅仅只是说到了数字中的正数,那么对应的非正数部分呢??

其实也是使用二进制表示了,听我娓娓道来,并非所有的数字都是正数! 因此需要东西来表示,什么东西? 什么东西表示正负?

大多数的计算机使用第一位来表示正负,剩下的三十一位表示数字,此时能表示的数字范围大约在 正负20亿

此时你可能又会反问道:虽然说20亿的范围,在生活的场景之中能够包揽,绝大多数场景确实够用!但是涉及到大数据量的时候呢? 譬如 双十一的千亿消费额和70亿人口 确实这20亿的范围值让人犯了难,但是对应的策略就是 64位 64位的出现能够表示的最大范围在 正负 9.210的18次方*

我们在计算机中必须给内存的每一个位置做标记,而对应的标记叫做 内存地址 方便存取数据,如今硬盘增加到了GB,TB甚至是PB,对应的上万亿字节的数据量,内存地址有64位,对应的非证书如何处理,一般我们叫做这样的为 浮点数 常见的浮点数使用IEEE754标准,用科学技术法的形式村十进制!

在浮点数中有两个概念是需要理解的,如下所示:

0.6259 * 10^3 = 625.9

那么在32位浮点数中如何表示呢?

  1. 1位表示正数还是负数
  2. 接下来的8位将指数存进去
  3. 剩下的23位存有效位数!

这就是32位浮点数的存储方法!

03|用什么表示字母 符号?

你的名字用什么表示?字母吗? 计算机中的用数字表示字母

最有效的方式是给字母编号,比如说: A是1,B是2

英国作家 弗朗西斯培根Francis Bacon 曾用五位序列编码英文的26个字母,在16实际传递机密信件!

其实很简单 2^5能够存储的内容是32个,对于26个字母的存储足够了,但是不能够存储标点符号,数字和大小写字母中的都存储(只能存储大/小写字母)

怎么办? 没关系 不过后来的美国发布了一种叫做 美国信息交换标准代码 ASCII 用来帮助计算机能够更好地交换信息和存储信息! 发明于 1963年 7位代码可以存储2^7 128个值 范围扩展之后可以存储大小写字母 数字 特殊符号以及对应的标点符号!

ASCII字符代码表一.png

如图所示,对吧对应的ASCII表一览无余,ASCII表是一个非常早的标准,并且很早就在使用) 其中最主要的作用和意义就是 让不同公司制作的电脑/计算机能够相互交换数据!

对应的一个概念就是 互用性 ==> 通用交换信息的能力 但是ASCII主要是为英语设计的!

但是与此同时,我们应该庆幸,庆幸二进制中的一个字节的长度为8位,而不仅仅是ASCII码所拥有的7位,更加具有拓展性,能够让 2^7 到 2^8 的字符渐渐变得常用! (一般用来给各个国家保留使用,在美国,额外数字作用于编码附加符号,例如说:数学符号,图形元素和常用的重音字符!)

拉丁符,在俄罗斯他们用额外的字符来表示西里尔字符,希腊使用希腊文,留下来的各个国家自己的空位,对大部分的国家都够用! 但是对于中国和日本这样的字符比较多的国家就比较捉襟见肘了! 是没有办法用8位表示的!

为了解决该问题,各个国家有了自己的方案,但是相互不兼容,直到Unicode的出现,当然Unicode统一所有编码的标准是在1992年设计的 ,是16位的具有一百多万个位置,100多种字母表加起来才12万个位置! 数学符号,emoji,视频编码,音频编码 最重要的是所有标准归根结底是一场串单位!

之后我们要聊的是,计算机如何操作二进制!

欢迎你在评论区与我交流

上一篇下一篇

猜你喜欢

热点阅读