频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

3.2.1 简单类型

作者: (美)Karli Watson等著 齐立波 译 黄静 审校 出处:清华大学出版社  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2008-01-24 13:33
关 键 词:C++  Java  C#  C#入门经典(第3版)
阅读提示:《C#入门经典》(第3版)第三章概述C#的基本语法、变量及其用法和表达式及其用法。本文主要介绍的是简单类型。

3.2  变量

如本章的引言所述,变量关系到数据的存储。实际上,可以把计算机内存中的变量看作架子上的盒子。在这些盒子中,可以放入一些东西,再把它们取出来,或者只是看看盒子里是否有东西。变量也是这样,数据可放在变量中,可以从变量中取出数据或查看它们。

尽管计算机中的所有数据都是相同的东西(一组0和1),但变量有不同的内涵,称为类型。下面再使用盒子来类比,盒子有不同的形状和尺寸,某些东西只能放在特定的盒子中。建立这个类型系统的原因是,不同类型的数据需要用不同的方法来处理。变量限定为不同的类型,可以避免混淆它们。例如,组成数字图片的0和1序列与组成声音文件的0和1序列,其处理方式是不同的。
要使用变量,需要声明它们。即给变量指定名称和类型。声明了变量后,就可以把它们用作存储单元,存储声明的数据类型的数据。

声明变量的C#语法是,指定类型和变量名,如下所示:

type name;

如果使用未声明的变量,代码就不会编译,但此时编译器会告诉我们发生了什么问题,所以这不是一个灾难性错误。另外,使用未赋值的变量也会产生一个错误,编译器会检测出这个错误。

那么我们可以使用什么类型呢?

实际上,可以使用的变量类型是无限多的。其原因是可以自己定义类型,存储各种复杂的数据。

尽管如此,总有一些数据类型是每个人都要使用的,例如存储数值的变量。因此我们应了解一些简单的预定义类型。

3.2.1  简单类型

简单类型就是组成应用程序中基本组成部件的类型,例如数值和布尔值(true或false)。简单类型还可以组成比较复杂的类型。大多数简单类型都是存储数值的,初看起来有点奇怪,肯定只需要一种类型存储数值吗?

数值类型过多的原因是在计算机内存中,把数字作为一系列的0和1来存储的机制。对于整数值,用一定的位(单个数字,可以是0或1)来存储,用二进制格式来表示。以N位来存储的变量可以表示任何介于0 到 (2N - 1)之间的数。大于这个值的数太大,不能存储在这个变量中。

例如,有一个变量存储了2位,在整数和表示该整数的位之间的映射应如下所示:
0 = 00
1 = 01
2 = 10
3 = 11

如果要存储更大的数,就需要更多的位(例如,3位可以存储0~7的数)。

这个论点的结论是要存储每个可以想像得到的数,就需要非常多的位,这并不适合PC。即使可以用足够多的位来表示每一个数,变量使用这些位来存储它,其效率也非常低下,例如,只需要存储从0到10之间的数 (因为存储器被浪费了)。其实4位就足够了,可以用相同的内存空间存储这个范围内的更多数值。

相反,许多不同的整数类型可以用于存储不同范围的数值,占用不同的内存空间(至多64位),其列表如表3-1所示。

表  3-1

    

   

sbyte

System.SByte

128~127之间的整数

byte

System.Byte

0~255之间的整数

short

System.Int16

在–32768~32767之间的整数

ushort

System.UInt16

0 ~65535之间的整数

int

System.Int32

在–2147483648~ 2147483647之间的整数

uint

System.UInt32

0~4294967295之间的整数

long

System.Int64

在–9223372036854775808~9223372036854775807之间的整数

ulong

System.UInt64

0~18446744073709551615之间的整数

注意:
这些类型中的每一种都利用了.NET Framework中定义的标准类型。如第1章所述,使用标准类型可以在语言之间交互操作。在C#中这些类型的名称是Framework中定义的别名,表3-1列出了这些类型在.NET Framework库中的名称。

一些变量名称前面的“u”是unsigned的缩写,表示不能在这些类型的变量中存储负号,参见该表中的“允许的值”一列。

当然,除了整数以外,还可以存储浮点数,它们不是整数。可以使用的浮点数变量类型有3种:float, double和 decimal。前两种可以用+/–m×2e的形式存储浮点数,m和e的值随着类型的不同而不同。Decimal使用另一种形式:+/–m×10e。这3种类型、其m和e的值,以及它们在实数中的上下限如表3-2所示。

表  3-2

 

 

m的最小值

m的最

大值

e的最
小值

e的最
大值

近似的最小值

近似的最大值

float

System.Single

0

224

149

104

1.5 × 10-45

3.4 × 1038

double

System.Double

0

253

1075

970

5.0 × 10-324

1.7 × 10308

decimal

System.Decimal

0

296

26

0

1.0 × 10-28

7.9 × 1028

除了数值类型外,还有另外3种简单类型,如表3-3所示。

表  3-3

 

 

char

System.Char

一个Unicode字符,存储0~65535之间的整数

bool

System.Boolean

布尔值:truefalse

string

System.String

一组字符

注意组成string的字符数没有上限,因为它可以使用可变大小的内存。

布尔类型bool是C#中最常用的一种变量类型,类似的类型在其他语言的代码中非常丰富。当编写应用程序的逻辑流程时,一个可以是true或false的变量有非常重要的分支作用。例如,考虑一下有多少问题可以用true或false(或yes和no)来回答。执行变量值之间的比较或检查输入的有效性就是后面使用布尔变量的两个编程示例。

介绍了这些类型后,下面用一个小示例来声明和使用它们。在下面的示例中,要使用一些简单的代码声明两个变量,给它们赋值,再输出这些值。

试试看:使用简单类型的变量

(1) 在目录C:\BegVCSharp\Chapter3下创建一个新的控制台应用程序Ch03Ex01。

(2) 给Program.cs添加如下代码:

    static void Main(string[] args)
    {
         int myInteger;
         string myString;
         myInteger = 17;
         myString = "\"myInteger\" is";
         Console.WriteLine("{0} {1}.", myString, myInteger);
         Console.ReadKey();
     }

(3) 运行代码,结果如图3-1所示。

图 3-1

示例的说明

我们添加的代码完成了3项任务:

● 声明两个变量
● 给这两个变量赋值
● 将两个变量的值输出到控制台上

变量声明使用下述代码:

         int myInteger;
         string myString;

第一行声明一个类型为int的变量myInteger,第二行声明一个类型为string的变量myString。

提示:
变量的命名是有限制的,不能使用任意的字符序列。本节的后面将介绍命名变量的规则。

接下来的两行代码给变量赋值:

         myInteger = 17;
         myString = "\"myInteger\" is";

使用=赋值运算符(在本章的“表达式”一节中详细介绍)给变量分配两个固定的值(在代码中称为字面值)。把整数值17赋给myInteger,把字符串"myInteger"(包括引号)赋给myString。以这种方式给字符串赋予字面值时,注意必须用双引号把字符串括起来。因此,如果字符串本身包含双引号,就会出现错误,必须用一些表示这些引号字符的其他字符(即转义序列)来替代它们。在本例中,使用序列\"来转义双引号:

myString = "\"myInteger\" is";

如果不使用这些转义序列,而输入如下代码:

myString = ""myInteger" is";

就会出现编译错误。

注意给字符串赋予字面值时,必须小心换行  ——  C#编译器会拒绝分布在多行上的字符串字面值。如果要添加一个换行符,可以在字符串中使用回车换行符的转义序列,即\n。例如,赋值语句:

           myString = "This string has a\nline break.";

会在控制台视图中显示两行,如下所示:

This string has a
line break.

所有的转义序列都包含一个反斜杠符号,后跟一个字符组合(详见后面的内容),因为反斜杠符号的这种用途,它本身也有一个转义序列,即两个连续的反斜杠\\。

下面继续解释代码,还有一行没有说明:

Console.WriteLine("{0} {1}.", myString, myInteger);

它看起来类似于第一个示例中把文本写到控制台上的简单方法,但本例指定了变量。这里不打算详细讨论这行代码。这是本书第一部分用于给控制台窗口输出文本的一种技巧,知道这一点就足够了。在括号中,有两类参数:

● 一个字符串
● 一个用逗号分隔开的变量列表,这些变量的值将插入到输出字符串中。

输出的字符串是"{0} {1}.",它们并没有包含有用的文本。可以看出,这并不是我们运行代码时希望看到的结果,其原因是:字符串实际上是插入变量内容的一个模板,字符串中的每对花括号都是一个占位符,包含列表中每个变量的内容。每个占位符(或格式字符串)用包含在花括号中的一个整数来表示。整数以0开始,每次递增1,占位符的总数应等于列表中指定的变量数,该列表用逗号分隔开,跟在字符串后。把文本输出到控制台时,每个占位符就会用每个变量的值来替代。在上面的示例中,{0}用第一个变量的值myString替换,{1}用myInteger的内容来替换。

在后面的示例中,就使用这种给控制台输出文本的方式显示代码的输出结果。

最后一行代码在前面的示例中也出现过,用于在程序结束前等待用户输入:

         Console.ReadKey();

这里不详细探讨这行代码,但后面的示例会常常用到它。现在只需要知道,它暂停代码的执行,等待用户按下一个键。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
关键字阅读
频道精选