饥人谷技术博客

编程基础

2017-09-26  本文已影响40人  黄同学2019

1.为什么要学习编程基础

因为你首先是一个合格的程序员,然后才是一个合格的前端工程师

前提:一个程序员必须知道

  1. 硬件和软件:计算机运行原理,参考书籍《编码》(理解难度面向0基础同学更友好),以及大学计算机相关课程,例如《计算机组成原理》,《计算机网络》等(最好有老师带,自学有一定难度!)。
  2. 最大的软件:操作系统
  3. 自己写软甲:数据结构和算法
  4. 多人写软件:软件工程

2. 前端工程师必知(自上而下)

3.常识:计算机如何存储0和1?

3.1 为什么计算机只能存储0和1?

这其中涉及到很多硬件知识,简单的来说,因为电脑是集成电路,内存微观上是无数小开关,或者是小电池,而“0”和“1”正好分别代表“开”和“关”(或者是“通电”和“不通电”),就好像家里的电灯开关只有开和关一样。所以,电脑的本质决定了它必须是二进制,只能存储0和1.

3.2 计算机是如何存储0和1?

计算机存储过程,其实就是给小电池不断充电的过程,因为小电池自身存在耗电(好比家里的南孚电池放久了不用自己会消耗电量一样)。

那么,既然小电池自己会耗电,又要不断充电,如何判断它是的状态是0和1呢?

规则是:当小电池电量大于50%,为1;电量小于50%,则为0。因为计算机的充电速率是纳秒级(10^-9), 即一次充电过程为:刷新 1次/10^-9s。

4.内存如何存储数字?

上面我们说,计算机已经解决了如何存储0和1的问题,那么,我们如何存储其他数字呢?

方法是将所有数字转化为0和1的组合去进行存储,这就是需要探究十进制如何转化为二进制的问题。

图片

4.1 存储整数

如上:37 在十进制上以10为底的方式得到结果过程:

37(10)
=3\*10^1+7\*10^0
=30+7

同理,37(10)也可写作以2为底的方式得到:

37(10)
=1\*2^5   +  0\*2^4   +   0\*2^3  +   1\*2^2   +   0\*2^1   +   1\*2^0
=1   0  0  1  0  1

4.2 存储小数

同理,对于小数也是一样的道理,以1/10为底,过程为:

0.75(10)
=7\*1/10   +   5\*1/10^2
=0.7+0.05

那么,以1/2为底,过程为:

0.75(10)
=1\*1/2   +   1\*1/2^2
=0.5+0.25

问题:如何存储负数和小数点呢?

参考资料如下:

5.如何存储字符?

方法:对所有字符进行编号,首先以十进制的方式表示每个字符,最后都转化为二进制的方式进行存储。参考:ASCII美国信息交换标准代码

如图:

图片

如图:如果你想存储字母a,那么就存储97(10),对应进制转换为: a -> 97(10) -> 0110 0001(2) -> 61(16)

如果你想存储数字1,对应进制转换为:1-> 49(10) -> 0011 0001 -> 31(16)

以上就是存储键盘上简单字母的方法。

6.如何存储中文?

参考资料:GB 2312

部分图片

7.如何存储所有字符?

原来使用ASCII字符编码进行存储时,只需要1个字节即8位存储就足够,但是使用Unicode却需要4个字节即32位来存储;

原来存储一个中文字符需要2个字节即16位,使用Unicode后需要4个字节32位存储。这样大大的浪费了存储空间。


图片

7.2 UTF-8的出现(UTF-8

因为采用Unicode存储字符的方式大大的浪费了存储空间,为了节省字符存储消耗,使用UTF-8的方式进行优化,注意,这里是对Unicode存储方式进行优化,而没有改变原有的字符编码。

规定:对于字母例如字母 “a”,依然采用原来的一个字节存储,而不是4个字节进行存储,这样就节省了3个字节的空间;

而对于汉字,例如汉字 “你” ,依然使用原来的2个字节进行存储,但是,在上面的一大堆 0 和 1 中,计算机是无法识别哪一段表示字母,哪一段表示汉字,所以,又拿出一个字节进行区分;

例如 图中汉字 “你”:原本2个字节存储为:01001111 01100000 ,而转换为3个字符存储,表示为:11100100 10111101 10100000,第一个字节的前缀 1110表示这个字符长度为3,后面第2和第3个字符的前缀都为10 是为了和前面所标志的一致,而实际上这个字符的组成,是从第一个字节的后4位、第二个字节的后6位,第三个字节的后6位所组成。

所以,计算机在读取的过程中,当它读到 0110 0001 时,它发现开头没有1,那么就知道这是一个单字节;当它读到 11100100 10111101 10100000,发现前面有3个1,那么它就知道这是由3个字节组成,然后它就自动去读取第一个字节的后4位、第二个字节的后6位,第三个字节的后6位,拼凑成2个完整的字节,表示汉字“你”

8.为什么很多中文软件喜欢使用GBK而不是UTF-8?

Unicode和GBk发展史

之前我们说,Unicode字符集使用UTF-8的编码方式更节省空间,而大家却为什么不用呢?考虑到两方面因素:

1.发展史:当时在国内发明GB 2312的早几年,微软的GBK还没有出现,大家习惯了使用 GB 2312 和 GB13000 ,而新出来的Unicode虽然全球统一,但是还不完善,没有采用UTF-8的编码方式。

之后GBK的出现,对原来的GB 2312更加优化,深受大家的喜爱。而到后来2000年出现的 GB 18030-2000 ,它统一和兼容了GBK,但是90年到2000年初,代大家还是习惯性的使用GBK字符集。

2.国情:在当时的背景下,信息相对比较闭塞,并不是什么东西像如今Google一下就可找到,所以在国内90年代大部分软件使用的字符集依然是GBK。

9.对前端的影响

上一篇下一篇

猜你喜欢

热点阅读