当前位置:C++技术网 > 资讯 > C++语言零基础入门教程:4.6 字符类型的来龙去脉

C++语言零基础入门教程:4.6 字符类型的来龙去脉

更新时间:2016-08-07 15:15:18浏览次数:1+次

    根据我们对世界的认知过程,我们先讲述了整数、浮点数的类型。4.2-4.5一共四节,将数值类型的整数和浮点数都完整的描述了。有了基本数值类型的认知之后,我们从未满足现状,因为需求还没有完全满足,是什么呢?
    我们用数值类型解决了数字的需求后,我们还会发现,我们人类一个基本的交流方式就是语言文字。这些文字不是计数,而是一个形状描述。所以,数值类型无法满足这样的需求了。
    我们将这些文字符号统一称为字符,即文字符号。我们将字符作为一个基本类型,用于解决符号问题。符号和数值是完全不一样的用途。数值本身是用来做数学运算的,而符号则是用来展示的,不会用于数学运算。不过,数值运算中,也是有不同的符号代表不同的数值大小的,最常用的就是阿拉伯数字符号0-9。这些符号让我们方便的记录和表示一些事物和意义,比如0表示什么也没有,也就是数学的0。1表示孤零零的个体,没有陪伴,只有自己跟自己说话。这里看到的都是符号,并不是数学数值运算的0-9。

象形符号

    在人类发展史中,最先要满足的应该是符号。基于符号,人类可以用来记录、表示和发展以及计算。否则凭各自的大脑去记录和表示同一个世界的同一个东西,就各有不同,这样没有办法相互沟通。每个人的脑子的猪可能都长得不一样,说以没法统一,也就没法准确的交流。所以,人类会制定一套统一的符号,来描述一个事物。大家去学习这些符号,了解符号对应的事物,这样符号就可以一直流传下去,这就是我们现在看到的各种文字符号。我们上学学的语文,就属于了解祖宗制定的一套对世界的描述符号以及符号代表的意义。这样就可以让我们可以和其他人无障碍的沟通。当在提到猪这个文字的时候,大家都可以联想到自己见过的猪,这样都理解。如果一个人没有学过猪这个文字,他虽然见过猪,但是不知道你说的这个“猪”就是他见过的猪。这样就是交流障碍。所以学习的一个目的,是让我们能够继承祖宗的文化,让我们能够相互的沟通。

    所以,符号是人类交流的公共约定。只不过,在计算机出现后,最新解决的是数字处理,然后基本需要满足后,才进一步满足更多需求,才开始支持字符。

    既然字符是一种新的数据类型,它和数值类型的整数、浮点数类型有什么区别呢?还有我们后面要讲的布尔类型的区别。

    我们对数值的类型的解释,可以直接从计算机内部存储的数值的二进制格式转为十进制来得到。如果是有符号的,则再增加一下符号的解释,如果是浮点数,则增加下小数点位置的解释。总之,只要将计算机内存存储的二进制按照一个逻辑规则解释后,就可以得到不同的数值了。数值类型的不同就在于解释数值的方式不同,这也是定义数值类型的本质。当然,不同的数值类型因为定义格式不一样,所以解释不一样,自然运算方法也就不一样。

    但是,数值类型都不需要借助外力,直接可以解释好。然而,字符类型却与众不同。因为人类世界的字符太多了,不同的国家地区都不一样,而且还有大量的新符号慢慢的增加。而且,计算机内部只能存储01这样的序列,没有直接存储符号。既然要用计算机来表示字符,那就要利用计算机的特点将符号关联起来。

    然后就出现了字符编码表。在计算机中存储的数值,因为解释不同,得到的结果就不同。同样,我们存储在计算机内部的字符,还是可以是数值,只是我们将这些数值解释成字符就可以了。关键在于如何去将这些数值解释为字符。我们无法利用进制来实现了。我们利用的是字符编码表。我们在一个表中,将所有字符符号罗列出来,然后依次按照排列的顺序编号。这样,我在计算机中存储的数值,也就作为这个字符编码表的字符所在的序号值,在字符编码表查找得到对应的字符符号。

    所以,我们可以因为不同的国家地区指定不同的字符编码表,同样的字符编码值可以对应成不同的字符。因为我们的字符存储到计算机中,是按照一个字符编码表存进去的,取出来的时候,还得按照同样的字符编码表解释,否则取出来的时候按照其他字符编码表解释,则出现的结果就是乱码。

    根据不同的国家给出不同的编码表,这样我们有很多个编码表,每一个编码表,都给予一个号,叫做代码页。不同的代码页表示了不同的国家的字符的编码表。这样可以解决不同国家的字符显示问题。最标准的就是美国的ASCII编码表,这是美国字符编码表。

    不过这样要在不同的代码页切换,很麻烦。为了解决全球的字符编码问题,出现了全球统一编码表Unicode,也就是一个编码表可以将全球所有的符号表示出来,自然这样的编码表要很大,所以需要很长的内存位去表示。ASCII的一个字符占用一个字节,即8比特位。但是只能编码美国使用的符号,全球的符号使用统一编码后,显然是不够的,所以Unicode字符占了32位,4个字节。这是标准的Unicode编码字符。如果程序中只需要用到美国字符,这样会很浪费内存。不过使用Unicode却使程序在国际化方面有不错的表现,大家只有都支持Unicode,就不要再管代码页,不用管那么多编码表了。全世界都用一个编码表。

    要知道,我们中国使用的文字符号,是没有办法用ASCII编码表表示的。我们有自己的中文编码表或者叫做字符集。这方面的知识,请阅读《字符集、字符编码、C语言字符编码、宽字符之间的关系全面分析》和《DBCS双字节字符集和MBCS多字节字符集的关系总结》。

    本节的内容是综述性的了解,要前前后后的全面了解一下,后面再展开编程中字符类型的使用介绍。字符问题是我们今后编程经常遇到的问题,如果不了解清楚,很容易被字符集、字符编码等问题卡住。