表达式

表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列

方法所得的组合。约束变量在表达式中已被指定数值,而自由变量则可以在表达式之外另行指定数值。

表达式其实就是一个式子: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)

  2. ++ 在变量前跟着,先++(自加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);

逻辑运算符

  1. &,|,^,&&,||, ! (作用一个)

  2. 或 |, 短路:||

  3. 与 &,短路:&&

  4. 非 !(作用一个)

  5. 异或 ^

&   和  &&

注: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位等价于快速乘2n次方,比普通乘法效率更高。

2. 右移运算符 >>

核心规则

将数字的二进制位向右移动指定位数,左侧补符号位(正数补0,负数补1),等价于:原数 / 2^移动位数(向下取整)。

示例:5 >> 2
  • 十进制 5 的二进制:0000 0101
  • 右移 2 位:0000 0001
  • 转回十进制:1
C#代码示例
// 等价于 5 ÷ 2² = 5 ÷ 4 = 1(向下取整)
Console.WriteLine(5 >> 2); // 输出:1
关键要点
  • 正数右移等价于快速除以2n次方并向下取整,效率高于普通除法。

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. 按位非运算符 ~

核心规则

对二进制的每一位取反(0110),结果为补码形式。

  • 快速计算公式:~x = -x - 1
示例
  • ~8-8 - 1 = -9
  • ~-8-(-8) - 1 = 7
C# 代码示例
Console.WriteLine(~8);    // 输出:-9
Console.WriteLine(~-8);   // 输出:7
关键要点
  • 注意:按位非的结果是带符号整数,可直接用快速公式计算,无需手动转补码。

运算符优先级,从高到低

  1. . () {} ;

  2. ++ -- ~ !

  3. * / %

  4. + -

  5. << >>

  6. < > <= >=

  7. == !=

  8. &

  9. ^

  10. |

  11. &&

  12. ||

  13. ? :

更多推荐