首页 > 代码库 > 计算机怎么看懂英语和汉语等非二进制语言?

计算机怎么看懂英语和汉语等非二进制语言?

计算机只识别二进制,它是怎么去识别英语,汉语等人类可以通信的语言呢?想知道这个问题就要先说二进制....
讲1个有趣的故事学习二进制的由来
古时候,2个远距离通信,通过马和飞鸽,还有狼烟......
北京到昌平之间 10公里,需要狼烟传信。
技术分享
技术分享
如果来了2个敌人,友军来了500人,浪费资源。
如何能资源合理利用,传得信息刚好?
怎么办?
1-100人------------------1根狼烟
101-200------------------2根狼烟
200-300------------------3根狼烟

10万敌人-------------------?这个方法行不通
 
重新定义:    1---1000 人             1根狼烟
                 1000----5000人        2根狼烟
                5000---10000人         3根狼烟
缺点:怎么去识别是1000?还是2000?    不精确--------------这个方法也行不通
 
需要重新定义:
把定义写死,一点那根烟表示2个敌人,4个敌人,8个敌人......
 
 1024    521     256     128      64      32     16       8     4     2敌人        1敌人
 1          1         1         1         1        1       1        1     1    1根烟         1根烟
来个6个敌人:..110-------------2根
来了7个敌人:..111-------------3根
来个9个敌人:..1001------------2根
来了10个敌人:..1010-----------2根
-----------------
来个128个敌人:1000 0000-----1根
 
————————————————
 4根烟-----2**4=16               来了15个敌人
................
................
16根烟-----2**16=65536       来了6万多敌人
---
32根烟-----2**32=42亿          可以表示42亿敌人
 
以上是二进制表示数字,那么怎么让二进制表示字符串?
二进制----------->>数字---------->>字符串(ASCII)   
a<----------------97<---------------二进制  0110 0001
ASCII表----127,表示占了7根狼烟  0111 1111   
127是半张表,整张表是255
技术分享
 技术分享
110       =6
1111    = 15
11111  =31
计算机存的是二进制流
110111111111,
那么问题来了,分不清楚,存的是6还是15还是31?空格和逗号也是二进制,
 
解决问题:需要固定一个长度: 规定计算机8位8位的取数
 
0000 0110   =16
0000 1111   =15
0001 1111   =31
字节概念的由来:
计算机8位8位的取数 ,是因为有ASCII才有个8位bit表示一个字节,也就是字节的概念;
 
8位一共是256种状态,255个数。美国人占127位,剩下的128位里有一小部分表示给中国使用
问题又出现了----->>>中国有汉字,怎么表示?-------自己做表--------映射到ASCII上去(后面128位里很小的一部分)
比如:120-200给中国,那么120,121可以表示一个汉字。
字符编码:是2进制到字符的表示的一张表  ---->>ASCII表
中国第一个字符表:GB2312(1980)
1980年  7445个字符,6763个汉字。
1995年  GBK1.0 = 20000左右个字符和汉字
2000年  GB18030 = 27000 个汉字,包括藏文,少数名族文
BIG5  台湾人的编码集
问题来了:
日本韩国,各个国家都有自己的编码集,对应集.
ISO标准组织,自己搞了一套unicode,1个字符占4个字节。UTF-32
4个字节是32位,全占满,是2**32的字符。浪费很多
UTF-16 一个字符,占2个字节,65535个字符。
美国人还是嫌太占硬盘空间
utf-8 可变长的字符编码 一个英文占一个字节,一个中文占3个字节,欧洲占2个字节
世界上最流行的字符编码集utf-8.
1个二进制数字 = 1比特  bit =计算机的最小数据单位---- 0或1
8个比特 = 1bytes  字节------ 现有bit后又ASCII再有的byte
1024byte = 1kbytes  kb
1024kb   = 1million bit  = 1mb  1兆
1024mb = 1GB,10亿bit
1024gb = 1TB
 ....................
 

计算机怎么看懂英语和汉语等非二进制语言?