2024年1月24日发(作者:)

4.0 数据类型

程序处理数据时,并不能人性化地区分数据的内容是什么,因此设计程序时,有必要人为地对数据进行分类,使数据得到高效地处理。作为一种典型的高级编程语言,C#同样会根据数据的内容和存储方式等特点对数据进行分类处理。

1.整数型

整数是不包含小数部分的数字,在数学中,整数包括正整数、负整数和0三类数字。在C#处理整数时,会将整数转换为二进制格式处理,并根据整数的长度再进行细分类。

在编写C#程序时,可先对所处理的数据进行长度判断,选择符合长度限度的数据类型,从而节省存储数据的空间。C#中的整数型数据分为8类,如表2-1所示。

表2-1 整数型数据的数据类型

数据类型

sbyte

byte

short

ushort

int

uint

long

ulong

说明

有符号8位整数

无符号8位整数

有符号16位整数

无符号16位整数

有符号32位整数

无符号32位整数

有符号64位整数

无符号64位整数

0~255(28-1)

-32768(-215)~32767(215-1)

0~65535(216-1)

-2147483648(-231)~2147483647(231-1)

0~4294967295(232-1)

-9223372(-263)~9223372(263-1)

0~18446744(264-1)

取值范围(10进制)

-128(-27)~127(27-1)

数据类型所表示的数字位数与其可容纳的数字数量密切相关。假设一个整数数据类型可表示n位整数,如其为无符号整数,则其最小值为0,最大值为2n-1,可表示2n个数;对于有符号整数,其最小值为-2n-1,最大值则为2n-1-1。了解数据类型的取值范围后,可以根据实际所操作的数据大小,选择相应的数据类型,防止超出数据类型范围的运算。

例如,某个数据用于表示一个不超过5万的正整数,就可以选择ushort数据类型,以最大限度节省存储该数据所使用的内存空间。

2.实数型

实数即“确实存在”的数字,其是数学中的一种概念。在解析几何中,实数表示数轴上所有点的映射,可以视其为包含整数和小数(有限的和无限的)的所有数字。计算机中的实数通常指浮点数(整数和小数)。

计算机对小数的运算效率要远低于整数,因此在C#中,将实数型数据划分为三种数据类型,通过数据的位数分类处理,包括单精度实数、双精度实数和十进制实数等,其作用如表2-2所示。

表2-2 实数型的数据类型

数据类型

float

double

decimal

说明

单精度存储32位浮点值

双精度存储64位浮点值

十进制存储128位浮点值

所引用的类

l

精确位数

±3.4×1038之间精度小于于1×10-44

±1.79×10308之间精度小于1×10-323

±7.9×1028之间数位不超过228个

在实际编写程序时,应在精度足够的情况下尽量使用精度较低的实数型数据,以提高运算效率,降低对内存空间的占用。

在使用单精度浮点数时,需要在浮点数之后添加一个小写f或大写F作为后缀。在使用双精度浮点数时,则不需要添加后缀。例如,分别声明两个浮点数,第一个为单精度,第二个为双精度,代码如下。

float fData = 1.9f ;

double dData = 2.2 ;

如确实需要使用十进制实数decimal类型,则应为数字后添加小写m或大写M作为后缀,对数字的精度作出区分。如果没有添加后缀,则C#会将数字视为双精度实数(double),从而导致编译错误。例如,声明一个十进制实数,代码如下。

decimal pi = 3.97m ;

3.逻辑型

逻辑型数据也称为布尔型数据,其作用是表达式表示真或者假,其对应的.NET

Framework类为n。在C#中,逻辑型数据只有两个值,即true和false。声明一个逻辑型变量,其方法如下。

bool booleanData = true ;

在很多编程语言中,可以使用数字0和1分别表示逻辑值false和true,例如C、C++、JavaScript等。然而在C#中,不允许以数字作为逻辑型

数据的值,因此这一方法是错误的。另外,在使用true和false两个值时,必须保证所有字符为小写。

4.字符型

字符类型数据的作用是处理在编程过程中遇到的ASCII字符和Unicode编码字符。ASCII字符是使用7位二进制数字表示的字符,而Unicode字符则是国际标准化组织制订的采取16位二进制编码表示的字符,可以表示全世界绝大多数语言。字符型数据类型只有一种,即char类型,如表2-3所示。

表2-3 字符型的数据类型

数据类型

char

说明

用于表示单个ASCII或Unicode字符

所引用的类

示例

'a','中'

在使用char数据类型时,需要注意其值的两侧必须添加单引号“''”,以表示该字符为char字符而非变量名,如下所示。

char charData= ' 中 ' ;

在C#中输入字符时,如用户需要输入一些特殊的格式化字符,则这些字符往往

会导致程序的错误,例如双引号“""”、单引号“''”等,此时,就需要使用转义符功能。转义符是通过斜杠“”+符号的方式表示特殊字符的一种方式,在表2-4中,列出了C#中的14种转义符。

表2-4 C#的转义符

转义符

'

a

f

r

u

v

作用

单引号“''”

斜杠“”

警报

换页符

回车符

Unicode 转义序列

垂直制表符

转义符

"

0

b

n

t

U

x

作用

双引号“""”

空字符

Backspace回退

换行符

水平制表符

代理项对的 Unicode 转义序列

Unicode 转义序列类似于“u”,只是长度可变

在使用字符型数据时,用户可以把char类型的数据隐式转换为ushort、int、uint、long、ulong、float、double或decimal等多种整数或实数型数据。此时,数据中的值将为字符在ASCII或Unicode码中的码元。使用这种方法,可以快速获取某个字符的Unicode码元,例如获取中文字符“汉”的码元,代码如下。

char charData = '汉';

int intData = charData;

ine(intData);

除以上几种数据类型外,值类型数据还包括枚举、结构等,这些数据类型将在之后的小节中详细介绍。

在之前介绍的均为值类型数据中,往往存储有实际的数据值。而下面再来了解一下引用类型,其本身不存储数据值,而是存储对这些实际数据的引用(地址)。当一个数值保存到一个值类型数据中以后,该数值将被赋值到值类型的变量中。而当一个数值被赋予到一个引用类型时,则仅仅是引用(保存数值的变量地址)被赋值,而十几只仍然保留在原内存位置。

C#的引用类型主要包括类类型(class)、字符串类型(string)、数组类型([])、接口类型(interface)和委托类型(delegate)等。由于这些类型比较复杂,且涉及到很多面向对象设计方面的知识,因此除字符串类型(string)以外,其他的几种数据类型在之后相关的章节中将逐个进行介绍。

字符串类型数据是一种最简单的引用类型数据,其本身相当于多个字符类型数据构成的集合。在C#中,字符串数据类型可以存储包含大小写英文字母、汉字、数字和特殊符号的转义符等多种字符。

声明一个字符串类型的数据,就是在内存中创建一个空的引用关系,而初始化一个字符串类型的数据,就相当于引用多个字符类型的数据,其方法如下所示。

string StringName = Value;

在上面的代码中,StringName为字符串型数据的名称,Value为该数据的引用集合。通常在书写字符串型数据时,需要在字符串引用两侧添加双引号“""”,代码如下。

string strData = "中华人民共和国" ;

与JScript、JavaScript等弱类型编程语言不同,C#中的字符串类型数据只能以双引号“""”标识,而字符型数据只能以单引号“''”标识,这

两种引号不能嵌套使用。