道家阴阳启发了莱布尼茨提出二进制!
1. 为什么是二进制?
1.1 二进制与硬盘(磁盘)
硬盘也叫磁盘,它内部是排列整齐的一个个小磁体。
磁盘上面有“电刷”,磁盘可以转动,“电刷”也可以上下移动,过程中“电刷”会刷过每个小磁体,可以知道磁体是否有磁性,并且电刷会放电来控制小磁体是否有磁性。
“电刷”刷过磁盘中一小段,得到上面排列整齐的小磁体的磁性顺序组合,我们假设有磁性用1表示,无磁性用0表示,假如得到 01100001
(8个小磁体),那它代表什么意思呢?
8个小磁体的是否有磁性总共有28=256种可能, 从00000000
到11111111
,假如我们提前定义好这256种每个排序顺序代表的含义,那么就知道01100001
代表着什么了,事实上早在计算机刚出来的时候就已经定义好了,那就是ASCII码,通过查询ASCII码表知道01100001
代表的是小写a
。
1.2 二进制与集成电路
IC是集成电路(Integrated Circuit)的简称。
如果集成电路使用的电源电压为+5V,那么引脚状态就只有0V和+5V。
我们将 +5V电压(高电压)表示1,0V电压(低电压)表示0。
如下集成电路的8个引脚输出(或输入)电压分别为0V、+5V、+5V、0V、0V、0V、0V、+5V,用01表示就是01100001,查询ASCII表就知道它表示的就是输出(或输入)字母a。
在我们的数以亿计的电子元件中,都是通过高低电压的输入或输出传递二进制信息的。
1.3 二进制与信号传输
信号是通过波传递的,包括我们用的4G/5G网络、WIFI、广播、蓝牙等等都是通过波传递信号,只是他们用的频段不一样。
包括声音也是一种我们人耳可以听到的波。
假如我们接收到这样一段波形,波峰表示1,波谷表示0,这一段波就是01100001,查询ASCII表就知道它表示的字母a。
实际中通过波传递信号非常复杂,波有正弦波、方波、脉冲等,传输中还需要调制解调等,这里大概了解一下波传输信号与二进制关系就行了!
现在知道了为什么是二级制?因为集成电路中通过高低电压来传递信息,磁盘中通过磁性有无来存储数据,信号通过波峰波谷来传输。
2. 比特与字节
2.1 比特与字节
二进制位也叫比特位,一个二进制数也叫做一个比特,英文就是bit。
8位二进制数被称为一个字节(Byte)。
字节是最基本的信息计量单位。比特位是最小单位,字节是基本单位。内存和磁盘都使用字节单位来存储和读写数据,使用位单位则无法读写数据。因此,字节是信息的基本单位。
2.2 百兆网速的实际下载速度
营业厅说的他们的下载网速达到100兆,为啥你实际下载速度只有10多兆?因为营业厅说的下载网速单位是bit,而实际上下载速度只会以Byte计量。 100bit = 12.5Byte。
2.3 二进制的16进制表示法
如果用二进制01来表示字节会很繁琐,更多情况下我们会用
两个16进制数表示一个字节,第一个16进制数表示前4位二进制数,第二个16进制数表示后四位二进制数。如下:
- 01100001用16进制表示是61。
- 11110001用16进制表示是F1。
3.进制转换
3.1 十进制转二进制
将一个十进制数转换成二进制数,可以通过模2法:
不断把十进制数除以2,直到商为0为止,每一步得到的余数即为二进制数的每一位(由下往上排列)。例如,将十进制数13转换成二进制数的过程如下所示:
因此,13的二进制表示是1101。
3.2 二进制转十进制
将一个二进制数转换成十进制数,可以通过以下方法实现:将每一位上的二进制数按权相加即可。例如,将二进制数1101转换成十进制数的过程如下所示:
因此,1101的十进制表示是13。
3.3 十进制转字节
将一个十进制数转换成一个字节,可以直接将十进制数转换成对应的二进制数,然后在不够8位的情况下在左侧填充0,直到形成一个8位二进制数。例如,将十进制数47转换成字节的过程如下所示:
- 47的二进制表示是00101111
- 在左侧填充0,形成一个8位二进制数:00101111
因此,47的字节表示是00101111。
3.4 字节转十进制
将一个字节转换成十进制数,可以直接将字节转换成对应的二进制数,然后按权展开,计算得到十进制数。例如,将字节11001101转换成十进制数的过程如下所示:
因此,11001101的十进制表示是201。
4. 字节单位
4.1 换算公式
手机上的128g到底代表什么?
要知道手机上的128g是什么含义?
还需要掌握单位换算公式。
-
1g=1024m(兆) (210=1024)
-
1m=1024k
-
1k=1024Byte(字节)
-
1Byte = 8bit(比特位/二进制位)
4.2 128g可以存多少张照片
手机存储空间128g就表示手机可以存储 128*1024*1024*1024
个字节,也就是 128*1024*1024*1024*8
个二进制数。如果一张照片大小是10m(兆),这已经是很大的一张照片了,那么128g可以存放128*1024/10=13107张照片,一万三千多张照片。
4.3 程序员说的10K薪资
程序员说的10K薪资要比普通人多240元。
5. 最后
5.1 破译一段二进制数
这里给出一段二级制数
01101000 01100101 01101100 01101100 01101111
(5个字节),已知它的的编码方式是ASCII码,那你可以知道它表达什么意思吗?
5.2 汉字需要几个字节编码
ASCII编码是最简单的编码方式,只需要1个字节(8位),用2^8=256种表示英文字母和符号的确够了,但是中文有那么多汉字怎么办呢?
存储汉字时,字符编码不同,汉字所占用的字节数也就不同。在 GBK字符编码下,一个汉字占用2个字节。而在 UTF-8 字符编码下,一个汉字占用3个字节。
6. 其它
6.1 ASCII码对照表
ASCII码是由美国信息交换标准委员会(American Standard Code for Information Interchange,简称ASCII)于1963年制定的。
关注微信公众号:“小虎哥的技术博客”。