2.1.2 数据类型
在前面的例子中出现了两种不同形式的数据值,即"Hello World!"和 3.1416,这 告诉我们计算机所处理的数据是多种多样的,或说具有不同的数据类型。注意,在计算机硬 件层次上并没有什么数据类型的概念,因为所有数据在计算机底层都是二进制序列。只是到 了高级编程语言层次,才提供了数据类型概念。
为了更精细、更准确地表示现实世界的信息,编程语言提供了多种数据类型(data type) 来区分不同种类的数据。早期的数据类型概念相当于定义一个合法值的集合,如果一个数据(变量)是 T 类型的,就意味着该数据(变量)只能取 T 的值集合中的值。后来,数据类 型概念不仅要考虑合法值是什么,而且还要考虑对这些合法值的合法操作是什么。因此,每 一种数据类型由两部分构成:全体合法的值(value)以及对这种值能执行的各种操作(operation,或称运算)。 例如,从小学数学开始,我们逐步认识了自然数、整数、实数、复数等数值集合,并且学会了各数集上的加减乘除等运算方法。除了数值,我们还学习了向量,并且知道向量的运 算方式和数值是不一样的。
为什么要将数据划分为各种数据类型?数据类型决定了合法的数据操作,不合法的操作 将导致程序错误。因此,数据类型的重要作用是通过类型检查来发现程序中的错误,例如企 图将一个人的姓名乘以他的年龄显然是没有意义的。如果不将现实世界的信息在计算机中分 门别类地表示,计算机就无法帮助我们发现像姓名乘以年龄这样的无意义操作。这些错误将 在程序运行的时候暴露出来,导致程序崩溃。有了数据类型的概念,编译器或解释器就能早 早发现程序中的这种错误,使程序在运行之前就有机会修改错误。在这个意义上,数据类型 起到了“量纲分析”①的作用。
① 物理量的量纲可用来分析、检验几个物理量之间的关系,这种方法称为量纲分析(dimensional analysis)。
学习利用计算机解决实际问题,一般都是从学习各种数据类型入手。学习每一种类型时, 应该考虑两个问题:该类型的值可以用来表示现实世界的什么信息?现实世界的信息处理任 务可以用该类型的什么操作实现?
编程语言中一般都预定义了一些基本数据类型,或称内建(built-in)类型,如 Python 语言中的数值(int、long 和 float)、字符串(str)、布尔值(bool)、列表(list)、元组(tuple)、 字典(dict)等。此外,编程语言还允许在基本数据类型的基础上构造更复杂的数据类型。