由于计算机的内存被划分成一个字节一个字节的排列和存储方式,类似小学生的作文本一样,一个格子就好比是一个字节,每个格子都有一个唯一的编号,这个编号就是内存地址。在C#中为了更方便的操作计算机内存,于是为这些格子进行了比较合理的分类。比如:如果程序员每次只申请一个格子,那就把这个格子取名为byte类型,这个byte类型表示1个字节,范围0-255;但是C#还规定了另一种数据类型sbyte类型,它也只占一个格子,即1个字节,但是表示的范围不同,是-128至+127;byte和sbyte的共同点是都只能表示256个数据,因为都是8个bit位。
如果程序员操作的数据超过了256个数据,比如有一个数为1024,1024换算成二进制数为100 0000 0000,一共是11位,显示一个格子就装不下了,那就至少申请两个格子(节字)来存储这个数。在C#中哪些数据类型占2个字节呢?答案是short、ushort和char。由于char类型表示字符,所以我们可以用short或ushort类型来申请两个格子的内存空间,这样就可以将1024存储在内存中了。
依以类推,如果有一个更大的数据65536,刚好超过了ushort的0-65535的范围,因为65535换成二进制是1111 1111 1111 1111,一共16位,而65536换成二进制是1 0000 0000 0000 0000,一共17位,所以至少需要申请3个格子(字节)才装得下。C#中没有3个字节的数据类型,有占4个字节的数据类型,它们分别是int、uint、float,所以,要在内存中存储65536,用这三种数据类型去申请内存,都没问题。
结论,我们可以按数据的大小,申请不同长度的内存空间。但是,申请的空间在哪?我该如何在源代码找到它们呢?在C#中,申请内存时,不管长短,都必须使用一个标识符去代表这一段内存空间,这个标识符就是变量的由来。
比如
byte age = 100;
short temp1 = -256;
ushort temp2 = 256;
int money = 65536;
这里的age、temp1、temp2、money都是变量,它们各自有着不同的数据类型,代表它们在计算机内存中的不同的存储和操作方式。
下表中列出了C#中提供的基本数据类型
分类 | 类型 |
整数类型 | byte、sbyte、short、ushort、int、uint、long、ulong |
浮点类型 | float、double |
十进制类型 | deceimal |
布尔类型 | bool |
字符 | char |
字符串 | string |
引用类型 | object |
枚举类型 | enum |
动态类型 | dynamic |
其中string、object都是为引用类型,dynamic的类型与分配的数据相关,其余全部都是值类型。
定义变量的语法
<data_type> <variable_list>;
data_type表示数据类型,variable_list表示变量,可以一次性定义多个相同类型的变量,多个变量之间用逗号分隔。例如
byte a,b,c;
int i,j,k;
可以在定义变量的同时给变量赋初值(即变量的初始化)。
byte a = 1, b = 2, c = 3;
int i = 4, j = 5, k = 6;
关于变量取名的限制,在 C# 中,变量的命名需要遵循一些规则:
- 变量名可以包含字母、数字和下划线。
- 变量名必须以字母或下划线开头。
- 变量名区分大小写。
- 避免使用 C# 的关键字作为变量名。
- 如果非要使用C#关键字作为变量名,则在前面加@符号。
byte @byte = 1;
int @int = 2;