常量是指哪些为人们可读格式的固定数值,在程序的运行过程中值不会发生改变,称为常量。
在C#中可以通过关键字const来声明常量,格式如下:
const 类型标识符 常量名 = 表达式;
const double PAI = 3.14;
//定义了一个double类型的常量PAI,值为3.14
常量的特点:
变量是程序运行过程中用来存储数据的存储单元。简单理解就是数学函数中的x,y,就是一个用来表示一个数据的名称。
在程序的运行至可以定义多个变量,以适应程序的各种需求。在定义变量时必须给每一个变量起一个名字,称为变量名,以便区分不同的变量。在计算机中,变量名代表存储地址。C#的变量名必须是合法的C#标识符。
变量在定义时,为了表明存储的数据必须指定数据类型。有了变量名和变量类型,一个变量的定义才是完整的。定义格式:
类型标识符 变量名1, 变量名2,......;
//定义变量的一些例子
float f = 1.23f;
char a = 'a';
int x, y;
x = 1;
y = 2;
int z = x + y;
虽然我们可以使用aaa,b这种变量名,但是在实际开发中还是建议使用具有实际意义的单词组合、缩写等方式命名变量以便记忆和使用,例如:Counter、UserName、PassWord等。最好遵循一定的命名规则,比如帕斯卡命名法等。
注意:C#规定,任何变量必须在使用前定义。
变量本身只是一个能保存某种类型数据的内存单元,对于程序而言,使用变量名只是为了访问其中的内存单元。变量的赋值,就是将数据保存到变量中的过程。格式为:
变量名 = 表达式;
在赋值的过程中需要注意表达式和变量的类型必须相同,对于数值类型的赋值则是和类型转换的规则相同,如果是隐式转换可以编译器自动完成,如果是显示转换需要用户进行操作。
另外,如果在变量定义的时候进行赋值,叫做变量的初始化。
运算符是表示各种不同运算的符号。例如:加减乘除等操作。
C#的运算符可以分为:算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符和其他运算符。
算术运算符用于对操作数进行算数运算。C#中的算术运算符和数学中的很相似。见表1:
运算符 | 意义 | 运算对象数目 | 运算对象类型 | 运算结果类型 | 例子 |
---|---|---|---|---|---|
+ | 取正或加法 | 1或2 | 任何数值类型 | 数值类型 | +1,a+2 |
- | 取负或减法 | 1或2 | -2,b-1 | ||
* | 乘法 | 2 | 2*a,x*y | ||
/ | 除法 | 2 | 5/3,a/c | ||
% | 模 | 2 | 5%2,10%3 | ||
++ | 自增运算 | 1 | i++,++i | ||
-- | 自减运算 | 1 | i--,--i |
虽然对于数学的加减乘除很好理解,但是有些人可能对于模、自增和自减不太了解。同样的在计算机中也有一些不同于数学的含义。
using System;
class test{
static void Main(){
int x = 2;
//此时y = x++等价于y = x, x = x + 1
int y = x++;//后缀格式
Console.WriteLine("y = {0}", y);
//此时y = ++x等价于x = x + 1, y = x
y = ++x;//前缀格式
Console.WriteLine("y = {0}", y);
}
}
//最终输出的结果为:
y = 2;
y = 4;
赋值运算符用于将一个数据赋予一个变量。
类型 | 符号 | 说明 |
---|---|---|
简单赋值运算符 | = | x = 1 |
复合赋值运算符 | += | x+=1等价于x=x+1 |
-= | x-=1等价于x=x-1 | |
*= | x*=1等价于x=x*1 | |
/= | x/=1等价于x=x/1 | |
%= | x%=1等价于x=x%1 | |
&= | x&=1等价于x=x&1 | |
|= | x|=1等价于x=x|1 | |
^= | x^=1等价于x=x^1 | |
>>= | x>>=1等价于x=x>>1 | |
<<= | x<<=1等价于x=x<<1 |
关系运算符用于在程序中比较两个值的大小,关系运算符的结果类型是布尔值,也就是true或false。
符号 | 意义 | 运算结果类型 | 运算对象个数 | 实例 |
---|---|---|---|---|
> | 大于 | 布尔型,条件成立为true,不成立为false | 2 | 2>3,a>b |
< | 小于 | 4<7,x | ||
>= | 大于等于 | 3.14>=pai | ||
<= | 小于等于 | a<=5 | ||
== | 等于 | 3==2,x==2 | ||
!= | 不等于 | x!=y,2!=3 |
如果关系运算符两边是数值类型对象,那么就是比较两个数的大小,如果是字符类型对象,则是比较两个字符的Unicode编码的大小。
如果关系运算符的对象是字符串,则是比较两个字符串的大小,对于字符串str1和str2比较大小的规则如下:
如果比较对象是布尔类型,则true大于false。
逻辑运算符用于表示两个布尔值之间的逻辑关系,逻辑运算的结果是布尔类型。
符号 | 意义 | 运算符对象类型 | 运算结果类型 | 运算对象个数 | 例子 |
---|---|---|---|---|---|
! | 逻辑非 | 布尔类型 | 布尔类型 | 1 | !(a > b) |
&& | 逻辑与 | 2 | 0<=x && x<10 | ||
|| | 逻辑或 | 2 | x>y || x>0 |
逻辑运算符常用在多条件判定时,例如我需要x在0到3的范围内,可以表示为:x>0&&x<3。
位运算符表示了对运算对象进行位运算。
符号 | 意义 | 运算符对象类型 | 运算类型结果 | 运算对象个数 | 例子 |
---|---|---|---|---|---|
~ | 按位取反 | 整型或者可以转换成整数类型的其他类型 | 整型 | 1 | ~x |
& | 按位与 | 2 | x & y | ||
| | 按位或 | 2 | x | y | ||
<< | 左移 | 2 | x << 1 | ||
>> | 右移 | 2 | x >> 2 | ||
^ | 按位异或 | 2 | x ^ y |
按位取反是将整型转换成二进制,然后每一位1转换为0,0转换为1。例如:
整数12的二进制为:00001100
~12的结果:11110011
按位与运算符&的运算规则如下:
0&0 = 0, 0&1 = 0, 1&0 = 0, 1&1 = 1;
按位或运算符|的运算规则如下:
0|0 = 0, 0|1 = 1, 1|0 = 1, 1|1 = 1;
按位异或运算符^的运算规则如下:
0^0 = 0, 0^1 = 1, 1^0 = 1,1^1 = 0;
左移运算符<<是将整型二进制数除符号位外,全部按位左移,高位丢弃,低位补0。例如:
整数12的二进制为:00001100
12<<1为:00011000(十进制为24)
右移运算符>>是将整型二进制数,全部按位右移,如果是无符号数高位移入0,如果是有符号数,若符号数为0,则左边移入0,若符号数为1,则左边移入0或1,取决于计算机系统。移入0称为“逻辑右移”,移入1称为“算术右移”。例如:
整数12的二进制为:00001100
12>>2为:00000011(十进制为3)
条件运算符是一个三目运算符,格式为:
操作数1?操作数2:操作数3
例如:x>y?x:y 含义为:如果x>y为true,则返回x,反之则返回y。故这个式子的含义是在xy中返回较大的一个。
由运算符、常量喝变量所组成的符号序列即为表达式。
对于多个运算符组合形成的表达式,需要按照运算符的优先级顺序进行运算。
类别 | 运算符 |
---|---|
基本 | (x) x.y f(x) a[x] x++ x-- new typeof sizeof checked unlocked |
一元 | + - ! ~ ++x --x (T)x |
乘除 | * / % |
加减 | + - |
移位 | << >> |
关系 | < > <= >= is as |
等式 | == != |
按位与 | & |
按位异或 | ^ |
按位或 | | |
逻辑与 | && |
逻辑或 | || |
条件 | ?: |
赋值 | = *= /= += -= <<= >>= &= ^= |= |
结束语:对于这一章节的内容划分上有点失算,导致这篇搁置有点久了。其实本来写这个系列的时候是打算把重心放在后面的泛型、委托、属性之类的进阶语法,但是在实际编写总结的时候发现其实有很多平时用不到的边边角角已经遗忘了,也算是对于自己基础的一个查缺补漏吧。也很感谢阅读这些文章的您,是你们的阅读和点赞让我有继续下去的动力,也希望这些文章能够对您有些许帮助。如有不足之处,烦请指正。