计算机编码的前世今生
我们都知道,计算机只能处理0和1这两种数字(实质应该是计算机硬件感应电流高低电平的变化,高电平为1,低电平为0),那么对于计算机而言,我们通过文本编辑器编辑而成的代码(实质是文本),计算机是无法识别的,计算机只能够识别01001001.....这样二进制编码集,那么我们的代码如何能够让计算机识别了?这个时候就需要编码的转换。
ASCII码
最初的计算机设计为8位(bit)一个字节(byte),因此一个字节能够表示的最大整数为255(二进制11111111为十进制255),两个字节所能表示的最大整数为65535,以此类推。
为了解决文本转换为数字(0和1)的问题,美国人发明了ASCII码,收录了128个字符,该表将每个字符对应一个数值,这样就将文本转换为了计算机可以识别的数字。
GB2312码(国标码)
ASCII码只适用于英文的编码情况,中文、韩文、日文等等其他语言的各种字符都未有收录,各国为解决这种问题,纷纷发明自己的编码表,中国发明的对应编码表为GB2312码,GB2312码在计算机中存储以其区位码为基础,其中汉字的区码和位码分别占一个存储单元,每个汉字即占了两个存储单元,因此理论上可以收录256*256即65536个汉字字符,基本上满足了中文的常用需要。
但是依然存在的一个问题是,老外浏览中文页面时,由于其浏览器不支持GB2312编码,那么他所看到的页面是乱码的,同理,中国人看韩国人,日本人这些同样有一套自己编码系统的浏览器时,同样页面是乱码的。
GBK
GBK为汉字内码拓展规范,英文全称是chinese internal Code Specification 。GBK编码是兼容GB2312编码,进一步的丰富的汉字的字库。
UNICODE
如上文所述,世界各国基本都有自己的一套编码表,你看我的,我看你的,互不支持,这样容易造成乱码的现象,为统一各国编码标准,出现了UNICODE码,UNICODE码用两个字节(16bits)基本编码了世界上所有的文字(字符)。
UNICODE码虽然统一了编码标准,但是编码效率不高,比如UCS-4(UNICODE的标准之一)规定了4个字节存储一个符号,那么对于 英文来说,它原本只需要1个字节就足够存储,但是现在用了高位三个字节补零,这是浪费内存。
UTF-8
本着节约的精神,出现了UTF-8编码(8bit Unicode Transformation Format),这是一种针对Unicode编码的可变长编码,UTF-8根据字符不同来自动选择编码的长短,比如英文就只用一个字节,这种编码方式兼容了ASCII码编码方式的遗留问题。
内存的概念
计算机所有程序的运行都是在内存中中进行的,因此对计算机的整体性能有较大的影响,内存(Memory)也称为内存储器,其作用是暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。计算机在运行过程中,CPU会将需要运算的数据调到内存中进行运算,当运算结束后,CPU会将结果传送出来。
内存又称为主存,是CPU能够直接寻址的的存储空间,内存是相对于外存而言的,平时使用的程序储存在硬盘等外存中,使用将其调入内存中运行。
- 物理存储器和地址空间
物理存储器和存储地址空间是两个不同的概念。
物理存储器是指实际存在的具体存储器芯片。
而存储地址空间是指对存储器编码(编码地址)的范围,所谓编码是对每一个物理存储单元(1个byte)分配一个号码,通常称之为“编址”,分配一个号码给一个存储单元的目的是为了能够方便的找到它,完成数据的读写。
物理存储地址与存储地址空间大小是不一定一致的。
网友评论