1.数据类型
C#数据类型分为两大类:值类型和引用类型。
1.1.值类型
C#中值类型分为三类:简单类型、结构类型和枚举类型。这里先介绍简单类型,结构和枚举会在后面介绍。
1.1.1.整数类型
整数类型顾名思义就是值为整数的数据。在数学中整数是无穷小到无穷大,但是计算机的存储能力是有限的,所以我们要给数据划定一个范围,C#中提供了8种整数类型如表1所示:
类型标识符 | 描述 | 可表示范围 |
---|---|---|
sbyte | 8位有符号整数 | -128~+127 |
byte | 8位无符号整数 | 0~255 |
short | 16位有符号整数 | -32768~+32767 |
ushort | 16位无符号整数 | 0~65535 |
int | 32位有符号整数 | -2147583648~+2147483647 |
uint | 32位无符号整数 | 0~4294967295 |
long | 64位有符号整数 |
-223372036854775808~ +223372036854775807 |
ulong | 64位无符号整数 | 0~1846744073709551615 |
1.1.2.浮点类型
既然已经有了整数,那么肯定会有小数,在C#种使用浮点类型表示。
单精度浮点型(float)32位宽,双精度浮点型(double)64位宽。
类型标识符 | 取值范围 | 精度 |
---|---|---|
float | 7位数 | |
doule | 15~16位数 |
1.1.3.小数类型
小数类型(decimal)是高精度类型数据,占用16个字节(128位),主要用于高精度的运算。
类型标识符 | 取值范围 | 精度 |
---|---|---|
decimal | 29位数 |
1.1.4.字符类型
C#的字符类型采用的是Unicode字符集。一个字符的长度位16位,可以表示大部分语言类型,字符类型标识符是char。
‘a'就是一个字符。
一个字符常数中只能含有一个符号且不为单引号或者反斜杠(\)。
转义字符
在字符中有时为了表示一些特殊常数,会使用转义字符来表示,即反斜杠+一个字符表示特殊含义。
转义符 | 字符名称 |
---|---|
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
\0 | 空字符 |
\a | 发出一个警告 |
\b | 倒退一个字符 |
\f | 换页 |
\n | 新的一行 |
\r | 换行并移到该行最前面 |
\t | 水平方向的tab |
\v | 垂直方向的tab |
1.1.5.布尔类型
布尔类型标识符bool,用来表示逻辑真假,只有true和false两种值。
1.1.6.注意问题
- 数据都有一个取值的范围,一旦长处范围就会报错;
- 对于浮点类型的+0和-0有时要区别对待;
- 对于浮点类型如果数据在精度范围内小到一定程度会被系统当作0处理;
- 数据类型会有重叠的部分可以使用后缀来区分,例如3.14可以是float也可以是double,但是3.14f一定是float,这里的f就是float类型的后缀,同理u表示uint、l表示long、d表示double、m表示decimal等;
- 前缀可以表示数据的不同进制,0x做为前缀就表示十六进制。
1.2.引用类型
如果我们想要描述更加复杂的数据类型,很显然上述的值类型并不能满足这样的需求,而引用类型就是为了描述结构复杂抽象的数据。引用类型所存储的数据是引用值的地址。如果说值类型是直接把物品拿出来,那么引用类型就是告诉你物品在仓库里的位置。
C#引用类型包含4种:类类型(class-type)、数组类型(array-type)、接口类型(interface-type)、委托类型(delegate-type)。现在主要介绍类类型。
1.2.1.万物之父-object类
object类是C#中所有类型的基类,C#中的所有类型都是直接或间接派生于object类,所以object类也叫万物之父,对于object类型可以赋值任何类型的值。
int x = 1;
char y = 'a';
object obj1, obj2;
obj1 = x;
obj2 = y;
1.2.2.字符串-string类
字符串就是一串字符,是被双引号包含的一系列字符。例如“Hello World!”就是一个字符串,也就是string类型。
string str1 = "你好,";
string str2 = "世界。";
string str3 = str1 + str2; //这里str3存储的是“你好,世界。”
char c = str3[0]; //这里字符c获取到str3的第一个字符“你”
由上面的代码可知,字符串中可以包含中文。
关于转义字符
Console.WriteLine("这是第一行\n这是第二行");
//\n根据上面的转义符表可知是换行操作,所以输出时会有一个换行的操作。
当然也可以直接输出内容忽略转义符,也就是逐字字符常数,也就是在字符串前加上@符号。
Console.WriteLine(@"这是一行\n这还是第一行");
//添加了@符号后,会原原本本的输出字符串中的所有内容,并且可以跨行输出。