变量的类型
第二章 第3节 预定义数据类型
我们已经知道了变量可以代表一个具体的数值,那么这个代表的过程是怎样实现的呢?
每台计算机上都有内存,比如4G、16G,甚至更多。我们写的代码,被翻译成用机器语言表示的代码,在执行的时候,这些机器代码先是被放到内存里,然后再执行。
在程序执行的时候,我们代码里写的变量,同时也被放到了内存里,占据一定的内存空间,每个具体的数值,就是存放在这个空间里的。
比如我们代码中的“int i;”,i是一个整数型变量,在C#中,int型变量的长度是32位的,这个变量在内存中占用32位的空间,程序运行的时候,先是数值1通过“i=1;”被放在了这个空间里,它的值使用“Console.WriteLine(i);”显示到屏幕上之后,数值1314通过“i=1314;”被放到了这个空间里,当1314放在这里之后,数值1就被覆盖掉了,自然也就不存在了,这个变量所占用的内存里只剩下了1314。
我们可能会对长度是32感到一些奇怪,它的长度为什么不是30、20,而非要是32呢?
原来计算机是按字长处理数据的,最早的计算机字长是8位,即一次能处理长度为8个bit位的数据,一个bit位只能表示0或1。后来发展到16位、32位、64位。所以,在C#中,规定整数int类型的长度为32位,而不是30或20位,是为了适应计算机处理数据的方式。Windows操作系统分为32位和64位,也是这个样子的。
在我们以后的编程过程中,会遇到各式各样类型的数据,不只是int类型的数值。所以C#还规定了很多其它的类型。我们逐个进行学习吧:
1. 整数型
1). sbyte
sbyte是8位有符号的整数,它能保存的数值范围是-128 ~ 127,共有256个数。超出这个范围,就要考虑使用别的数据类型了。sbyte是signed byte的缩写,中文的意思是有符号字节。其实,一个字节就包含8个bit位,即长度为8。
2). short
short是16位有符号的整数,它能保存的数值范围是-3,2768 ~ 3,2767,共有6,5536个数。
3). int
int是32位有符号的整数,它能保存的数值范围是-21,4748,3648 ~ 21,4748,3647,共有42,9496,7296个数。
4). long
long是64位有符号的整数,它能保存的数值范围是-922,3372,0368,5477,5808 ~ 922,3372,0368,5477,5807,共有1844,6744,0737,0955,1616个数。
5). byte
byte是8位无符号的整数,它能保存的数值范围是0 ~ 255,共256个数。
6). ushort
ushort是16位无符号的整数,它能保存的数值范围是0 ~ 6,5535,共6,5536个数。
7). uint
uint是32位无符号的整数,它能保存的数值范围是0 ~ 42,9496,7295,共42,9496,7296个数。
8). ulong
ulong是64位无符号的整数,它能保存的数值范围是0 ~ 1844,6744,0737,0955,1615,共1844,6744,0737,0955,1616个数。
2. 浮点类型
浮点类型通常用来表示带有小数部分的数值,因为小数点在数值里可以前后移动,所以也叫浮点。
1). float
float是32位单精度浮点数,它能大致能表示7位十进制数,可以用于较小的浮点数。
2). double
double是64位双精度浮点数,它能大大致表示15位十进行制数,可以用来表示较大的浮点数。
一般情况下,代码中出现的小数,编译器一般假定是double类型的,如果想指定这个数值是float类型的,就要在数值的后面加上一个字母F,或f。如:
float f = 12.3F;
或
float flt = 520.1314f;
3. decimal类型
有些情况下,我们还需要处理更高精度的数值,它甚至超过了15位十进制数,在这种情况下,可以使用decimal类型,它占用128位存储空间,能提供28位十进制数的处理能力,如:
decimal d = 12.30M;
4. bool类型
布尔型,它仅能表示true或false。C#中,不像C或C++那样,bool值不能和数值相互隐式转换,如果试图把0或1赋值给一个布尔变量,编译器就会报错。
5. 字符类型
char类型可以保存单个字符,它表示一个16位的(Unicode)字符。字符的值使用单引号括起来,如:
char c = 'A';
表示把字符A赋值给变量c,即把字符A放到c变量占用的存储空间里。
我们以前接触过类似"Hello, world!"的类型,因为它是用双引号括起来的,是字符串,跟使用单引号括起来的字符类型是有区别的。其实,字符串中的每个元素,是一个个的字符,字符串就是字符串起的串。