更新时间:2016-08-07 15:15:18浏览次数:1+次
既然字符是一种新的数据类型,它和数值类型的整数、浮点数类型有什么区别呢?还有我们后面要讲的布尔类型的区别。
我们对数值的类型的解释,可以直接从计算机内部存储的数值的二进制格式转为十进制来得到。如果是有符号的,则再增加一下符号的解释,如果是浮点数,则增加下小数点位置的解释。总之,只要将计算机内存存储的二进制按照一个逻辑规则解释后,就可以得到不同的数值了。数值类型的不同就在于解释数值的方式不同,这也是定义数值类型的本质。当然,不同的数值类型因为定义格式不一样,所以解释不一样,自然运算方法也就不一样。
但是,数值类型都不需要借助外力,直接可以解释好。然而,字符类型却与众不同。因为人类世界的字符太多了,不同的国家地区都不一样,而且还有大量的新符号慢慢的增加。而且,计算机内部只能存储01这样的序列,没有直接存储符号。既然要用计算机来表示字符,那就要利用计算机的特点将符号关联起来。
然后就出现了字符编码表。在计算机中存储的数值,因为解释不同,得到的结果就不同。同样,我们存储在计算机内部的字符,还是可以是数值,只是我们将这些数值解释成字符就可以了。关键在于如何去将这些数值解释为字符。我们无法利用进制来实现了。我们利用的是字符编码表。我们在一个表中,将所有字符符号罗列出来,然后依次按照排列的顺序编号。这样,我在计算机中存储的数值,也就作为这个字符编码表的字符所在的序号值,在字符编码表查找得到对应的字符符号。
所以,我们可以因为不同的国家地区指定不同的字符编码表,同样的字符编码值可以对应成不同的字符。因为我们的字符存储到计算机中,是按照一个字符编码表存进去的,取出来的时候,还得按照同样的字符编码表解释,否则取出来的时候按照其他字符编码表解释,则出现的结果就是乱码。
根据不同的国家给出不同的编码表,这样我们有很多个编码表,每一个编码表,都给予一个号,叫做代码页。不同的代码页表示了不同的国家的字符的编码表。这样可以解决不同国家的字符显示问题。最标准的就是美国的ASCII编码表,这是美国字符编码表。
不过这样要在不同的代码页切换,很麻烦。为了解决全球的字符编码问题,出现了全球统一编码表Unicode,也就是一个编码表可以将全球所有的符号表示出来,自然这样的编码表要很大,所以需要很长的内存位去表示。ASCII的一个字符占用一个字节,即8比特位。但是只能编码美国使用的符号,全球的符号使用统一编码后,显然是不够的,所以Unicode字符占了32位,4个字节。这是标准的Unicode编码字符。如果程序中只需要用到美国字符,这样会很浪费内存。不过使用Unicode却使程序在国际化方面有不错的表现,大家只有都支持Unicode,就不要再管代码页,不用管那么多编码表了。全世界都用一个编码表。
要知道,我们中国使用的文字符号,是没有办法用ASCII编码表表示的。我们有自己的中文编码表或者叫做字符集。这方面的知识,请阅读《字符集、字符编码、C语言字符编码、宽字符之间的关系全面分析》和《DBCS双字节字符集和MBCS多字节字符集的关系总结》。
本节的内容是综述性的了解,要前前后后的全面了解一下,后面再展开编程中字符类型的使用介绍。字符问题是我们今后编程经常遇到的问题,如果不了解清楚,很容易被字符集、字符编码等问题卡住。