Visual Basic .NET程序设计(第3版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 确定数据的性质:数据类型

要进行计算就需要数据,同时数据应有它们明确的取值范围,也包含它能够进行的操作,这就是数据类型。例如,某人的月收入是一个数据,这个数据具有四则运算的能力,可通过乘法计算出他的年收入。一个人的姓名也是一个数据,显然这个数据不能被加、减操作。因此,数据类型定义了值的范围并确定了它能够进行的操作,即通过数据类型对数据的性质进行定义。

2.3.1基本数据类型

每种计算机语言都有自己的数据类型,它们的标准类型基本相同,在特殊数据类型上存在差异。VB 具有丰富的数据类型,在数值运算和文本处理方面表现出很强的处理能力。按照使用的数据性质进行分类,可以把数据类型分为6类,如表2.2所示。

表2.2 VB的数据类型

2.3.2 数值类型

数值类型包括字节型、双精度型等类型,事实上还有无符号整型、无符号长整型等,以适应不同数值处理的需要。因为在计算机中,数据被存放在内存单元,其存储长度必然受到限制。各数值类型的数据取值范围不同,因此选择合适的类型能够有效地提高处理效率。比如,能使用一字节表示的数据,其处理效率肯定会比使用整型或者长整型的数据效率要高。

1.字节型(Byte)

Byte类型占1字节(8位二进制)的内存单元,用来表示一个0~255的无符号整数。

2.短整型(Short)、整型(Integer)和长整型(Long)

这三种数据类型常用于整数运算,都是有符号数,可以是正数、负数或者零。长整型使用8字节(64位),整型使用4字节(32位),短整型只有2字节。VB允许数据直接加上类型符后缀定义数据的类型,或直接在数据后加L表示长整型、加字母S表示短整型、加字母I表示整型,如45678&和45678L均表示45678是一个长整型数。

如果要用无符号数,则可以对应地使用UShort、UInteger和ULong类型。

即使有经验的程序员有时也会忽视数据类型的合理选择。一旦超出数据类型的取值范围,往往会导致溢出错误,如使用Short表示了32768,这时可以改用UShort,取值范围为0~65535。

3.浮点数

VB使用两种类型表示浮点数,允许在更大范围内表示带小数的数。Single是单精度,Double是双精度。由于表示范围大,大数据运算会产生一定的误差,这是编程者应预计到的。

之所以叫做浮点数,是因为在这种数据类型中,小数点可以在数的任何位置。实际上,它们保留了有限的有效位数,如超出则改用指数表示法。Single保留7位十进制有效位,Double保留15位。使用E代表以10为底的指数。

在表示浮点数时,也可以在数字后加字母指定类型,此时用F表示Single类型,用R表示Double类型,如12.3456R。

注意:如果直接定义浮点数,应把指数符号E放在数字中间,否则无效。例如,3E2、137.E2、-2.3456789E-106是正确的表示,而E32、E-5、9ex是错误的。

4.精确数据类型

Decimal数据类型存储16字节的有符号数,表示按10的可变幂变大或变小的96位(12字节)整数。其比例因子指定小数点右边的数位,范围为0~28。比例为0时,最大的可能值为:

        +/-79228162514264337593543950335(正好是96个1)。

如果小数位数为28,则最大值为:

        +/-7.9228162514264337593543950335

Decimal数据类型提供数字的最大数量的有效数位,最多支持29个有效数位,特别适用于需要使用大量数位但不能容忍舍入误差的计算,如金融方面的计算。

Decimal 数据类型的默认值为0。如果有一个变量a为Decimal 类型,要让 a 等于79228162514264337593543950335,不能直接写成:

        a=79228162514264337593543950335

这样系统会告诉你溢出,应该写成:

        a=79228162514264337593543950335D 或 a=79228162514264337593543950335@

@是类型符,加后缀D也表示该数是Decimal数据类型的。

说明:Decimal 不是浮点数据类型,存储二进制整数值,以及符号位和指定值中的哪部分为纯小数的整数比例因子。因此,Decimal数字在内存中的表示形式比浮点型更精确。

2.3.3 字符数据类型

“字符”是单个的,而“字符串”一般是指一个以上的字符的组合。VB中主要有Char和String两种。

现在的VB使用16位Unicode编码,Unicode的前128位(0~127)与ASCII字符集中定义的码位相同。后面的128码位(128~255)表示特殊字符,如拉丁字母、重音符号、货币符号以及分数等。Unicode 将其余码位(256~65535)用于表示不同种类的符号,包括世界范围的各种文本字符、音调符号以及数学和技术符号。

我们编写的程序代码也以字符作为基本构造元素,所有程序都由特定含义的字符序列组合而成。当然我们使用的中文版VS也支持中文字符,如第1章示例程序中使用的那样。为了区别程序中的代码字符,VB使用英文的双引号""把那些被程序处理的字符及字符串括起来。

1.字符型(Char)

Char 数据类型表示单个字符,用2 字节保存其码位,取值的范围为0~65535。每个码位表示一个Unicode字符,如"A"就是一个字符,其编码为65。

2.字符串型(String)

String表示字符串类型。String类型字符串的字符个数可以为0到大约 20亿个Unicode字符,具体取决于实现平台。

字符串可以包括所有的Uncode码中给出的符号,包括字母、数字和类似于+、-、*、/、&、$的符号。下面这些都是正确的字符串示例:

        "Visual Basic"                  (VB全称,含空格,字符串长度为12,不包括双引号)
        "浙江大学 浙江杭州中国"        (学校名称,长度为12,含空格)
        ""                           (空,即字符串的长度为0,注意空格不代表“空”)
        “!”                          (单个字符的字符串,长度为1)
        "0571-12345 杭州市政府热线"    (电话号码等,长度为18)

2.3.4 逻辑型与日期型

1.逻辑型(Boolean)

逻辑型是以逻辑代数发明人布尔的名字命名的数据类型,所以也叫做布尔型。对一个命题判断要么成立要么不成立,则使用Boolean类型表示判断结果。逻辑值只有是(True)和否(False)两种状态,所以我们也把它叫做二值类型。

逻辑值和数值类型进行转换的时候,它们是非对称的:① 数值数据转换为布尔值时,0对应False,非0对应True;② 布尔值转换为数值数据时,False对应0,True对应-1。

2.日期型(Date)

VB使用日期型数据表示日期和时间,表示范围从0001年1月1日到9999年的12月31日,时间从午夜 12:00:00 到晚上 11:59:59.9999999。VB 使用两个“#”把时间日期数据括起来,如“#12/12/2012 11:35:35 PM#”表示日期为2012年12月12日,时间是23:35:35。

2.3.5 对象引用型

对象引用型(Object)也是VB中的一个比较特殊的类型,保存引用对象的4字节地址,可以为Object变量分配任何引用类型(字符串、数组、类等)。Object 变量还可以引用任何值类型(数值、Boolean、Char、Date等)的数据。VB中有许多对象,指定对象后的Object变量就可以再被引用。编程者可以将窗体名(当前窗体用Me)、控件名赋值给Object变量,然后通过该变量访问对象的属性等。

2.3.6 自定义数据类型

VB 6.0为用户提供了自定义数据类型,在Visual Basic 2008中升级为结构。Structure是一种支持成员(如方法和属性)的类型。

Structure 语句可以满足用户的需求,把 VB 已有的数据类型重新组合或者构造为一个新类型,同时可以在其内定义成员方法(函数)。我们将在2.4.3节中通过一个示例进一步解释Structure类型。