运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,分类如下:
算术运算符
关系运算符
逻辑运算符
复合赋值运算符
位运算符
其他运算符
运算符优先级(由高到低)
| 类别 | 运算符 | 结合性 |
| 后缀 | ()[]->.++-- | 从左到右 |
| 一元 | =-!~ ++ -- (type)* & sizeof | 从右到左 |
| 乘除 | * / % | 从左到右 |
| 加减 | + - | 从左到右 |
| 移位 | << >> | 从左到右 |
| 关系 | < <= > >= | 从左到右 |
| 相等 | == != | 从左到右 |
| 位与AND | & | 从左到右 |
| 位异或XOR | ^ | 从左到右 |
| 位或OR | | | 从左到右 |
| 逻辑与AND | && | 从左到右 |
| 逻辑或OR | || | 从左到右 |
| 条件 | ?: | 从右到左 |
一、算术运算符
算术运算符又分为一元运算符和二元运算符。
一元:++、--:对于向加加或者减减这样只需要一个操作数就能完成的运算,称为一元运算符。
二元:*、/、%、+、-、=:对于这些需要两个或以上才能完成运算操作符,称为二元运算符。
| 运算符 | 描述 |
| + | 加运算符 |
| - | 减运算符 |
| ++ | 增量运算符 |
| -- | 减量运算符 |
| * | 乘法运算符 |
| / | 除法运算符 |
| % | 余数运算符 |
| = | 赋值运算符 |
=赋值运算符
int a = 10;//将10赋值给整形a变量
bool b = true;//将true赋值给布尔b变量
+加运算符
int a = 5;
int b = 12;
int c = a + b;
Console.WriteLine(c);//输出结果:17
-运算符
int a = 19;
int b = 12;
int c = a - b;
Console.WriteLine(c);//输出结果:7
*乘法运算符
int a = 5;
int b = 10;
int c = a * b;
Console.WriteLine(c);//输出结果:50
/除法运算符
int a = 10;
int b = 5;
int c = a / b;
Console.WriteLine(c);//输出结果:2
Console.WriteLine(b/a);//输出结果:0
double ab = 2.2;
Console.WriteLine(ab / 2);//输出结果:1.1
%求余运算符
int a = 10;
int b = 3;
int c = a%b;
Console.WriteLine(c);//输出结果:1
Console.WriteLine(a / b);//输出结果:0
//注意求余,一般仅限于 整形类型(short,int,long)
++自增运算符
int iu = 10;
iu++;//iu = 11, iu = iu + 1;
++iu;//iu = 12, iu = iu + 1;
i++与++i的区别
int a = 10;
int b = a++;//b=10
Console.WriteLine($"a的值={a},b的值={b}");//输出结果:a=11 b=10
int a = 10;
int b = ++a;//b=11 a=11
Console.WriteLine($"a的值={a},b的值={b}");//输出结果:a=11 b=11
--自减运算符
int i = 10;
i--;//i = 9 i = i -1;
--i;//i = 8 i = i -1 ;
i--与--i与i++,++i一样
二、关系运算符
下表显示了 C# 支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
| 运算符 | 描述 | 实例 |
| == | 检查两个操作数的值是否相等,如果相等则条件为真 | A==B不为真 |
| != | 检查两个操作数的值是否相等,如果不相等则为真 | A!=B为真 |
| > | 检查左操作数的值是否大于右操作数的值,如果是则条件为真 | A>B不为真 |
| < | 检查左操作数的值是否小于右操作数的值,如果是则条件为真 | A |
| >= | 检查左操作数的值是否大于等于右操作数的值,如果是则条件真 | A>=B不为真 |
| <= | 检查左操作数的值是否小于等于右操作数的值,如果是则条件真 | A<=为真 |
三、逻辑运算符
下表显示了 C# 支持的所有逻辑运算符。假设变量 A 为布尔值 true,变量 B 为布尔值 false,则:
| 运算符 | 描述 | 实例 |
| && | 称为逻辑与运算符。如果两个操作数都是非零,则条件为真。 | A&&B为真 |
| || | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真 | A||B为真 |
| ! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真非运算符将使其为假 | !(A&&B)为真 |
四、赋值运算符
下表列出了 C# 支持的赋值运算符:
| 运算符 | 描述 | 实例 |
| = | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C=A+B将A+B的值赋给C |
| += | 加且赋值运算符,把右边操作数加上左边操作数的结果赋给左边操作数 | C+=A相当于C=C+A |
| -= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C-=A相当于C=C-A |
| *= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C*=A相当于C=C*A |
| /= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C/=A相当于C= C /A |
| %= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C%=A相当于C = C%A |
| <<= | 左移且赋值运算符 | C<<=2等同于C= C<<2 |
| >>= | 右移且赋值运算符 | C>>=2等同于C= C>>2 |
| &= | 按位与且赋值运算符 | C&=2等同于C = C&2 |
| ^= | 按位异或且赋值运算符 | C^=2等同与C =C^2 |
五、其他运算符
下表列出了 C# 支持的其他一些重要的运算符,包括 sizeof、typeof 和 ? :。
| 运算符 | 描述 | 实例 |
| sizeof() | 返回数据类型的大小 | sizeof(int),返回4 |
| typeof() | 返回class的类型 | typeof(Program); |
| & | 返回变量的地址 | &a;将得到变量的实际地址 |
| * | 变量的指针 | *a;将指向一个变量 |
| ?: | 条件表达式 | 如果条件为真?则为X:否则为Y |
| is | 判断对象是否为某一类型。 | if(Ford is Car)//检查Ford是否是Car类的一个对象 |
| as | 强制转换,即使转换失败也不会抛出异常 | object obj = new StringReader("Hello"); StringReader r = obj as StringReader; |
- namespace Demo运算符
- {
- internal class Program
- {
- static void Main(string[] args)
- {
- //自加自减
- //++自加1 --自减1
- //int a = 10;
- //a++;//a = a+1
- //Console.WriteLine(a);
- //int b = 10;
- //b--;//b = b-1
- //Console.WriteLine(b);
-
- ++在前 ++在后
- ++在前 先自加再赋值
- ++在后 先赋值再自加
- --在前 --在后
- --在前 先自减再赋值
- --在后 先赋值再自减
- //int x = 3;
- //int y = x--;
- //Console.WriteLine("y={0}",y);
- //y = --x;
- //Console.WriteLine("y={0}", y);
-
- //int z = 2;
- //int s = z++;//2 s=2 z =3
- //Console.WriteLine("s = {0}", s);
- //s = ++z;//4 s=4 z=4
- //Console.WriteLine("s = {0}", s);
-
- //+
- //int a = 10;
- //int b = 20;
- //int c = a + b;
- //Console.WriteLine(c);
- -
- //int d = a - b;
- //Console.WriteLine(d);
- *
- //int e = a * b;
- //Console.WriteLine(e);
- /取整数
- //int f = a / b;
- //Console.WriteLine(f);
- % 取余数
- //int g = a % b;
- //Console.WriteLine(g);
-
- //练习:从键盘输入一个三位数的整数,分别输出它的百位、个位和十位数。
- //Console.WriteLine("请输入一个三位的整数:");
- 一个三位整数输入123 /100 %100/10 %10
- //int num = Convert.ToInt32(Console.ReadLine());
- 百位 /100
- //int num1 = num / 100;
- //Console.WriteLine(num1);
- 十位 %100/10
- //num1 = num % 100 / 10;
- //Console.WriteLine(num1);
- 个位 %10
- //num1 = num % 10;
- //Console.WriteLine(num1);
-
- //四位数 取最前面的一个数字的时候,这个数字是几位数就/几
- //Console.WriteLine("请输入一个五位的整形数据:");
- 一个五位整数的输入 12345 /10000 %10000/1000 %1000/100
- %100/10 %10
- //int num3 = Convert.ToInt32(Console.ReadLine());
- //if((num3 > 0) &&(num3 < 100000))
- //{
- // //万位
- // int num1 = num3 / 10000;
- // Console.WriteLine("输入的五位整数万位:{0}", num1);
- // //千位
- // num1 = num3 % 10000 / 1000;
- // Console.WriteLine("输入的五位数的千位:{0}", num1);
- // //百位
- // num1 = num3 % 1000 / 100;
- // Console.WriteLine("输入的五位数的百位:{0}", num1);
- // //十位
- // num1 = num3 % 100 / 10;
- // Console.WriteLine("输入的五位数的十位:{0}", num1);
- // //个位
- // num1 = num3 % 10;
- // Console.WriteLine("输入的五位整数的个位:{0}", num1);
- //}
- //else if((num3 < 0) || (num3 >= 100000))
- //{
- // Console.WriteLine("输入的数据错误,请输入一个五位的整数!!!");
- //}
-
- //复合运算符
- //int x = 10;
- //int y= 20;
- //x += y;//x = x + y;
- //Console.WriteLine(x);
-
- 设int s = 11,则执行完s+=s*s之后,s的值是
- //int s = 11;
- //s += s * s;
- //Console.WriteLine(s);
-
- //关系运算符
- //int a = 10;
- //int b = 20;
- //bool c = a > b;
- //Console.WriteLine(c);
-
- //c = a < b;
- //Console.WriteLine(c);
-
- //c = a >= b;
- //Console.WriteLine(c);
-
- //c = a <= b;
- //Console.WriteLine(c);
-
- //c = a == b;
- //Console.WriteLine(c);
-
- //c = a != b;
- //Console.WriteLine(c);
-
- //string类型
- //string a = "10";
- //string b = "80";
- //string s = a + b;
- //Console.WriteLine(s+"asdf");
-
- //string a = "a";
- //string b = "b";
- //bool c = a == b;
- //Console.WriteLine(c);
- //逻辑运算符
- //&&与 并且 ||或者 !:取反
- //&&:2个条件都正确才会返回true 否则返回false
- //true true true
- //true false false
- //false true false
- //false false false
- //Console.WriteLine("请输入第一个一位整数:");
- //int num1 = Convert.ToInt32(Console.ReadLine());
- //Console.WriteLine("请输入第二个一位整数:");
- //int num2 = Convert.ToInt32(Console.ReadLine());
- //bool than = num1 == 9 && num2 ==9;
- //Console.WriteLine(than);
- //than = num1 < 10 && num2 >=10;
- //Console.WriteLine(than);
- //than = num1 > 10 && num2 <= 10;
- //Console.WriteLine(than);
- //than = num1 >= 10&&num2 >=10;
- //Console.WriteLine(than);
-
- // ||或 或者 只要一个条件对了就返回true
- //true true true
- //false true true
- //true false true
- //false false false
- //int a = 10;
- //int b = 20;
- //bool c = a == 10 || b== 20;
- //Console.WriteLine(c);
- //c = a < 10 || b == 20;
- //Console.WriteLine(c);
- //c = a == 10 || b > 20;
- //Console.WriteLine(c);
- //c= a> 10 || b > 20;
- //Console.WriteLine(c);
-
- !:取反
- //int a = 10;
- //int b = 20;
- //bool c = !(a > b);
- //Console.WriteLine(c);
- //Console.WriteLine(!c);
-
- //条件运算符
- //操作数1?操作数2:操作数3
- //?前面的是对的true就返回:前面的值,反之就返回:后面的值
- //int a = 10;
- //bool b = a > 10 ? true : false;
- //Console.WriteLine(b);
- //string d = a >= 10 ? "10" : "22";
- //Console.WriteLine(d);
-
- //条件1能被4整除 不能被100整除
- //条件2能被400整除
- //Console.WriteLine("请输入一个年份:");
- //int num1 = Convert.ToInt32(Console.ReadLine());
- //bool a = (((num1 % 4 == 0) && (num1 % 100 != 0)) || (num1 % 400 == 0)) ? true : false;
- //Console.WriteLine(a);
-
- sizeof
- //int a = sizeof(int);
- //Console.WriteLine(a);
-
- typeof 反射
- //Console.WriteLine(typeof(Program));
-
- //运算符的优先级
- //运算优先级别—般规则∶
- // 一元运算符高于二元运算教高于三元运算符
- //算术运算符高于关系运算符﹐高于逻辑运算符
- //int a = 10;
- //int b = 20;
- //bool c = b + a++ > 10&& b == 20 ? true : false;
- //Console.WriteLine(c);
-
-
- }
- }
- }