C#运算符
表达式
表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列
方法所得的组合。约束变量在表达式中已被指定数值,而自由变量则可以在表达式之外另行指定数值。
表达式其实就是一个式子:a+b ,true && false 。。
表达式也是值类型
算术运算符
+ - * / %
代码演示
//1 算术运算符 + - * / %
Console.WriteLine(10 + 20);//30 + 加法
Console.WriteLine(10 - 20);//-10 - 减法
Console.WriteLine(10 * 20);//200 *乘法
Console.WriteLine(10 / 20);//0 / 求整数
Console.WriteLine(10 % 20);//10 % 求余数
Console.WriteLine(10 / (float)3); //3.333333
Console.WriteLine(10 * 1.0 / 3); //3.333333333333333
// Console.WriteLine(10/0); 0 不能作为除数
Console.WriteLine(-100 % -3);//-1
//int num = 10;
//Console.WriteLine(num%0); 报除数为0的异常
练习
//321 求 百位、十位、个位数分别为?
int ge = 321 % 10;
Console.WriteLine(ge);
int shi = 321 % 100 / 10;
Console.WriteLine(shi);
int bai = 321 / 100;
Console.WriteLine(bai);
赋值运算符
=, +=,-=,*=,/=,%= 中间不能加空格,他们是一个整体
代码演示
//2 赋值运算符 `=`,+=,-=,*=,/=,%=
int aa = 100; //把100赋值给aa =就是赋值
aa += 100; //= 加上100之后赋值给aa 200
aa -= 10; // aa = aa-10 190
aa *= 10; // aa= aa*10 1900
aa /= 3; // aa = aa / 3 633
aa %= 3; // aa = aa%3 0
Console.WriteLine(aa);
自增++ ,自减--
自加1,自减1 a = ++b, a= b++ 区别
-
++ 在变量后跟着,先赋值,在++(自加1)
-
++ 在变量前跟着,先++(自加1),再赋值,
++:自增,自身加一;++在前表示先让该变量加一,再让其参与运算。++在后表示先让该变量参与运算,再让其加一。 --:自减,自身减一;--在前表示先让该变量减一,再让其参与运算。--在后表示先让该变量参与运算,再让其减一。
代码演示
int dd = 20;
Console.WriteLine(dd++); //20
Console.WriteLine(dd); //21
Console.WriteLine(++dd); //22
示例
//例子
int a = 2, b = 3;
int c = (a++) * (--b); // a++在后 先取a 再计算乘以, 该句代码执行完之后 a的值就加1
Debug.Print("a = " + a); //3
Debug.Print("b = " + b); //2
Debug.Print("c = " + c); //4
比较运算符
<,>,<=,>=,==,!= bool类型
代码演示
//4 比较运算符 >,<,>=,<=,==,!= bool类型
Console.WriteLine(10 > 20);//false
Console.WriteLine(10 < 20);//true
Console.WriteLine(10 <= 20);//true
Console.WriteLine(10 >= 20);//false
Console.WriteLine(10 == 20);//false == 相等
Console.WriteLine(10 != 20); // != 不等于 true
三目运算符
格式:比较表达式 ? 值1 : 值2; 比如:string info = a > b ? "值1" : "值2";
示例
//5 三目运算符 比较表达式 ? 值1 : 值2;
//10>20 条件
//?? 是否 判断条件是否成立
//如果成立了取?后面值;如果不成立 取冒号后面的值
//= 把取出的值赋值给aa
string aaa = 10 < 20 ? "刘德华" : "王宝强";
Console.WriteLine(aaa);
练习
//二、输入三个数,求最大数,最小数,中间数(必须使用三目运算符)
Console.WriteLine("输入第一个数:");
int a1 = int.Parse(Console.ReadLine());
Console.WriteLine("输入第二个数:");
int a2 = int.Parse(Console.ReadLine());
Console.WriteLine("输入第三个数:");
int a3 = int.Parse(Console.ReadLine());
//a1和a2相比,取出来最大值赋值temp // temp代表俩俩相比之后的最值
int temp = a1 > a2 ? a1 : a2;
int max=temp> a3 ? temp : a3; // 最大值
//a1和a2相比,取出来最小值赋值temp1 // temp1代表俩俩相比之后的最值
int temp1 = a1 < a2 ? a1 : a2;// 找出a1和a2小值
int min= temp1 < a3 ? temp1 : a3;// 最小值
int mid=a1 + a2 + a3 - max- min;//中间值
Console.WriteLine(max);
Console.WriteLine(min);
Console.WriteLine(mid);
逻辑运算符
-
&,|,^,&&,||, ! (作用一个)
-
或 |, 短路:||
-
与 &,短路:&&
-
非 !(作用一个)
-
异或 ^
& 和 &&
注:T:true ,F:false
& 与: (如果一个条件为false 另外一个正常走) T&T=T T&F=F F&T=F F&F=F
// & 与: (如果一个条件为false 另外一个正常走) T&T=T T&F=F F&T=F F&F=F
Console.WriteLine(10 > 20 & 10 < 14); //false
Console.WriteLine(10 < 20 & 10 < 14); //true
Console.WriteLine(10 > 20 & 10 > 14);//false
Console.WriteLine(10 < 20 & 10 > 14); //false
&& 并且,会造成短路(如果一个条件为false 另外一个就不走了) T&&T=T T&&F=F F&&T=F F&&F=F
//&& 并且,会造成短路(如果一个条件为false 另外一个就不走了) T&&T=T T&&F=F F&&T=F F&&F=F
Console.WriteLine(10 > 20 && 10 < 14); //false
Console.WriteLine(10 < 20 && 10 < 14); //true
Console.WriteLine(10 > 20 && 10 > 14);//false
Console.WriteLine(10 < 20 && 10 > 14); //false
对比;& 和 && 在一个条件为false的情况 。看看另外一个条件走走
//int a = 3, b = 4;
//bool result = a > b & a++ == 3;
//Debug.Print("result = " + result); //false
//Debug.Print("a = " + a);//4 证明后面的a++已经执行了
int a4 = 3, b5 = 4;
bool result = a > b && a++ == 3;
Debug.Print("result = " + result); //false
Debug.Print("a = " + a);//3 证明后面的a++不执行
| 和 ||
| 或 : T|T=T T|F=T F|T=T F|F=F
Console.WriteLine(10 > 20 | 10 < 14); // true
Console.WriteLine(10 < 20 | 10 < 14); //true
Console.WriteLine(10 > 20 | 10 > 14);//false
Console.WriteLine(10 < 20 | 10 > 14); //true
|| 或者 会造成短路 T||T=T T||F=T F||T=T F||F=F
Console.WriteLine(10 > 20 || 10 < 14); // true
Console.WriteLine(10 < 20 || 10 < 14); //true
Console.WriteLine(10 > 20 || 10 > 14);//false
Console.WriteLine(10 < 20 || 10 > 14); //true
| 和 || 的区别 ,一个条件成立之后 再看看另外一个条件走不走
int a11 = 3, b1 = 4;
bool result1 = a1 < b1 || a1++ == 3;
Debug.Print("result1 = " + result1); //true
Debug.Print("a1 = " + a1);//3 证名a1++没走 ,|| 造成短路。
&和 | 总结
&:只要一个为false 整体为false 一个条件为false 另外一个正常走
&& :只要一个为false 整体为false ,一个条件为false 另外一个不再判断了
|:只要一个为true 整体就是True
|| 只要一个为true 整体就是true 会短路
! 取反
!:!T=F !F=T;取反操作
Console.WriteLine(!true);//false
Console.WriteLine(!false);//true
^异或
^:T^T=F F^F=F T^F=T F^T=T;两边值不一样才为真
//^ 异或 俩个条件不一样的情况下 才为True
// T^T=F F^F=F T^F=T F^T=T;
Console.WriteLine(10 > 9 ^ 10 < 14); //false
Console.WriteLine(10 > 9 ^ 10 > 14);//true
Console.WriteLine(10 < 9 ^ 10 > 14);//false
位运算符
一、位运算基础概念
位运算的操作对象是二进制位,核心逻辑是:先将数字转为二进制,再对每一位单独进行计算。特点:执行效率远高于普通算术运算,常用于底层开发、性能优化、状态控制等场景。
二、各运算符详解
1. 左移运算符 <<
核心规则
将数字的二进制位向左移动指定位数,右侧补0,等价于:原数 × 2^移动位数(无溢出时)。
示例:3 << 2
- 十进制
3的二进制:0000 0011 - 左移 2 位:
0000 1100 - 转回十进制:
12
C#代码示例
// 等价于 3 × 2² = 3 × 4 = 12
Console.WriteLine(3 << 2); // 输出:12
关键要点
- 左移
n位等价于快速乘2的n次方,比普通乘法效率更高。
2. 右移运算符 >>
核心规则
将数字的二进制位向右移动指定位数,左侧补符号位(正数补0,负数补1),等价于:原数 / 2^移动位数(向下取整)。
示例:5 >> 2
- 十进制
5的二进制:0000 0101 - 右移 2 位:
0000 0001 - 转回十进制:
1
C#代码示例
// 等价于 5 ÷ 2² = 5 ÷ 4 = 1(向下取整)
Console.WriteLine(5 >> 2); // 输出:1
关键要点
- 正数右移等价于快速除以
2的n次方并向下取整,效率高于普通除法。
3. 按位与运算符 &
核心规则
对应二进制位全为 1 时结果才为 1,有 0 则为 0(全 1 出 1,否则出 0)。
示例:3 & 5
- 十进制
3→ 二进制:0011 - 十进制
5→ 二进制:0101 - 按位与:
0001 - 转回十进制:
1
C# 代码示例
Console.WriteLine(3 & 5); // 输出:1
关键要点
- 常见用途:判断奇偶(
x & 1,结果为 1 则是奇数,0 则是偶数)、提取二进制的特定位。
4. 按位或运算符 |
核心规则
对应二进制位只要有一个为 1,结果就为 1,全 0 才为 0(有 1 出 1,全 0 出 0)。
示例:3 | 5
- 十进制
3→ 二进制:0011 - 十进制
5→ 二进制:0101 - 按位或:
0111 - 转回十进制:
7
C# 代码示例
Console.WriteLine(3 | 5); // 输出:7
关键要点
- 常见用途:设置二进制的特定位为
1(比如权限控制中的位标记)。
5. 按位异或运算符 ^
核心规则
对应二进制位相同为 0,不同为 1(相同出 0,不同出 1)。
示例:3 ^ 5
- 十进制
3→ 二进制:0011 - 十进制
5→ 二进制:0101 - 按位异或:
0110 - 转回十进制:
6
C# 代码示例
Console.WriteLine(3 ^ 5); // 输出:6
关键要点
- 常见用途:交换两个变量的值(无需临时变量)、简单数据加密。
6. 按位非运算符 ~
核心规则
对二进制的每一位取反(0变1,1变0),结果为补码形式。
- 快速计算公式:
~x = -x - 1
示例
~8:-8 - 1 = -9~-8:-(-8) - 1 = 7
C# 代码示例
Console.WriteLine(~8); // 输出:-9
Console.WriteLine(~-8); // 输出:7
关键要点
- 注意:按位非的结果是带符号整数,可直接用快速公式计算,无需手动转补码。
运算符优先级,从高到低
-
. () {} ; -
++ -- ~ ! -
* / % -
+ - -
<< >> -
< > <= >= -
== != -
& -
^ -
| -
&& -
|| -
? :
更多推荐
所有评论(0)