编程基础
1.硬件与软件:计算机的运行原理《编码》
2.最大的软件:操作系统 维基百科
3.自己写软件:数据结构&算法《数据结构与算法分析》 掌握排序算法非常必要
4.多人写软件:软件工程代码大全
层次结构
操作系统运行于硬件之上
浏览器运行于操作系统之上
HTML/CSS/JS运行于浏览器之上
HTML/CSS/JS和数据都来自于服务器
三层依赖关系
HTML+CSS+JS依赖浏览器
浏览器依赖操作系统
操作系统依赖硬件
计算机存储
计算机是采用二进制存储方式,即只能存储0和1。所以计算机里所有的数据都是一串由0和1组成的二进制信息,那计算机是如何存储0和1呢?如何将各种数据转化成二进制存储的呢?
第一步:如何存储0和1
如图所示8*8的晶体管方阵 竖向存值 横向输电
1就充电(显示红色),0就不充电(显示白色)
晶体管存电少,耗电很快(ms),要多次刷新,就是在没耗尽电量之前进行充电(ns),CPU的赫兹就是每秒刷新多少次,来保证1还是1。
第二步:存储数字
其他进制转二进制
十进制转二进制
37(10)=3 * 10 ^1 +7* 10^0 =32+4+1=1 * 2^5+1 * 2^2+1 * 2^0=100101(2)
那么负值怎么存储?第一位作为符号位+0-1,但可能有问题,采用补码来存储
小数怎么存储?
0.75(10)=7 * 1/10+5 * 1/10 ^2=0.5+0.25=1 * 1/2+1 * 1/4=0.11(2)
只有0和1,那小数点怎么表示?采用浮点数存储
第三步:存储字符
外国人将每个字符进行了编号0~127共128个ASCII码值
ASCII美国标准表
如果你想存储 a,那么就储存 97(10) 对应的二进制
a -> 0110 0001(2) -> 61(16)(为方便书写将二进制转成十六进制)
如果你想存储字符1,那么就储存 49(10) 对应的二进制
1 -> 0011 0001(2) -> 31(16)
第四步:存储中文
我国制定了常用中文字符集[GB 2312 中国国家标准字符集(https://zh.wikipedia.org/wiki/GB_2312)
而后微软将一些生僻字日韩字符等加入后推出了GBK字符集
第五步 全球字符 Unicode字符集 4个字节32位存储
第六步 如何将Unicode存进计算机
低效率方式:
a -> 00000000 00000000 00000000 01100001(2) = 0061(16)
你 -> 00000000 00000000 01001111 01100000(2) = 4F60(16)UTF-8高效率方式:
a -> 01100001
你-> 11100100 10111101 10100000
使用UTF-8编码方式(是将Unicode存入计算机的一种算法步骤),UTF-8可以变长存储,根据字节的长短来不定长的存储,以节省空间。
- 像“a”这种较短的字符(小于七位的),我们可以直接在前面补零表示
- 像“你”这种长的字符,由于计算机读取时无法弄清楚是存储了一个 由两个一字节组成的字符还是一个由两字节组成的字符,解决方法:
我们从高位依次划分6个字符进行分组,直到分出的组不足6个。即:0100 111101 100000
分别在每一组前面补全读取这一串二进制信息的规则,即:1110XXXX 10XXXXXX10XXXXXX
1110XXXX:111表示计算机需要读取3个字节,每个字节的开头都是10
10+XXXXXX、10+XXXXXX: 所以后两个字节的开头也补上10,说明是和第一个字节共三个字节一起的,组成一个字符。只有X才是原二进制有效的数据。
! JS采用Unicode字符集,但没使用UTF-8编码。