计算机作为一个机器是如何知道人类想要做什么样的操作?
计算机只能读懂二进制,二进制被成为机器语言,而人们写的语言不是二进制,而是例如C,C++,JS,Java等这种高级语言,虽然机器又读不懂我们写的语言,但是有编译器这种东西可以把高级语言转换成机器语言让计算机去理解。
二进制
在二进制的世界里面只有两种符号,就是数字0和1.
1110 0100 1011 1101 1010 0000 1100 0101 1010 0101 1011 1101
上面这一串数字就是二进制,他表达的意思是中文中的【你好】
存储过程
上面的【你好】两个字是如何转变成机器语言存储在计算器中的?其中的过程是怎样的?
计算机只能存储0和1,那么计算机是如何存储0和1的(从硬件上讲)。
下面是一个内存

内存上的一个个黑色方块就是用来存储数据的内存芯片(也可以叫内存颗粒),0和1就是存储在这里面。
把每个内存颗粒想象成拥有8个圆点,每个圆点就是一个电池,电池的特点是可以存储电。
比如一个内存颗粒就拥有8个圆点

充电的话,无非就是两种状态,充电和不充电,在这里,黑色代表没充电,也就是0,红色代表充电,也就是1.
电池都存在耗电的情况,只有把电能转化成化学能后耗电才会慢,但是内存不能把电能转化成化学能,内存晶体管做的,现在的晶体管太小了塞不进去其他将电能转化为化学能的东西。
内存充电和耗电的时间都很快,从没冲电到充电的状态一般是纳秒级别,耗电一般是几毫秒(充完电马上开始耗电)。
比如电脑断电后,电脑会马上黑掉,内存里的数据也会马上消失,所有的0和1都不见了。在我们使用电脑的过程中,为了保证数据不丢失掉,耗完电后会立马刷新立刻充电,保证1还是1,CPU多少赫兹的意思就是每秒可以冲多少次电。
这样就可以在电脑有电的时候在内存上存储0和1了,只要可以存0和1,就可以存储我们想要的任何数据-世间万物。
存储的数据
1.数字
我们先来存储数字
平时我们使用的数字,比如1,2,3,4,5,6,7,8,9,10之类的数字都是十进制。
由于计算机只能存储0和1,也就是二进制,所以想要把十进制存储到计算机中,就有一个将十进制转化成二进制的一个过程。
比如 37 这个十进制数字。
//转化成二进制是这样的
37 = 32 + 4 +1
= 1 * 2^5次方 + 0 * 2^4次方 + 0 * 2^3次方 + 1 * 2^2次方 + 0 * 2^1次方 + 1 * 2^0次方
= 100101
最终十进制的37在二进制中是100101
可以存储数字,但是比如 -37 怎么转化成二进制?负号会以补码的方式存储。(也是用0和1的方式表示负数,在计算机的世界里只能存储0/1)小数点会以浮点数的形式存储。
2.字符
比如【你】,【好】这些文字,英文字母【a】,【b】;【%】等各种符号都算字符。
在上面可以看到人们已经想出办法可以存储数字了,关于如何存储字符,人们想到的办法是给每一个字符用数字来代表,比如可以这样:数字1,代表我们说的中文【你】字。
由于最先想出这个办法的国家是英国/美国人,他们按照他们的语言习惯创造了ASCII(美国信息交换标准代码),所以在这个标准中,只有他们自己的语言,他们可以通过这个标准进行字符的存储,其他国家如果想在计算机上用英文,可以查看这个表对计算机进行存储。
其他国家例如日本,中国,韩国等,无法通过该标准与自己国家的语言相配合,如日语,中文,韩语等,但是根据这个逻辑,各个国家可以自行按照自己国家语言的使用习惯制定适合自己国家的标准。
关于ASCII码(a si ki):
ASCII码从数字0开始,到127号,也就是一共有128个,分别对应了128个字符。
请看下面的ASCII码片段

如第48个,48这个数字存储的是0,这个0和数字0不同,这个0是字符0。
当我们想存储一个字符0时,美国人会这么做,他会去看这个ASCII表,发现字符0是在48的位置上,因此他需要把数字48存储进去,但是前面说过,计算机只能存储0和1,计算机对除了这两个数之外的其他数的存储也是需要转换成二进制的,因此他还需要将48转化成二进制,也就是0011 0000,最终将转化后的二进制存储在电脑中就可以了。
中国人后来为了使自己国家的语言也能这么使用,将ASCII表进行了扩充,ASCII标准演化成了GB2312标(GB 代表 国标)。

如【丁】字对应的是【B6A1】
虽然GB2312收录了很多汉字,包括拉丁字母,希腊字母,日文平假名等,但是还是缺少一部分的生僻字,繁体字,日语,朝鲜语等。
造成的问题就是,比如有的人名字带有生僻字,他们如果使用的电脑使用的编码是GB2312,就会发生他们自己的名字打不出来的情况,因为这个表根本就没有收录这些文字。
微软推出了GBK 字符集将上面缺少的部分进行了扩充。(GBK代表GB2312的扩充,GB2312和GBK主要是中国人使用)
但是不管是ASCII还是GBK,还是存在一个问题就是他们是不同的标准,一台电脑只能使用一个,所以各个国家的人使用的都是适合自己国家的标准,我们的电脑可以很好的显示中文字符,但是如果我们用来显示其他国家的字符,就会出现乱码,因为在我们国家制定的编码表中,并没有考虑其他国家的文字。
这时候Unicode联盟就发挥了用处,Unicode联盟的使命是,将全世界的字符都编在同一个表中,我们能想到的所有字符,都被包含在这个表中,不管是哪一个国家,只要电脑应用了这个编码的标准,就可以显示任何其他国家的文字,这个表就是Unicode字符集。
网友评论