C# 运算符和表达式

欢迎购买我的专栏
1.高级C#学习
2.网络

概述

C# 提供了许多运算符。 其中许多都受到内置类型的支持,可用于对这些类型的值执行基本操作。
C#中有算术运算符比较运算符布尔逻辑运算符位运算符和移位运算符相等运算符
在下面的代码中,表达式的示例位于赋值的右侧:

int a, b, c;
a = 7;
b = a;
c = b++;
b = a + b * c;
c = a >= 100 ? b : c / 10;
a = (int)Math.Sqrt(b * b + c * c);

string s = "字符串字面";
char l = s[s.Length - 1];

var numbers = new List<int>(new[] { 1, 2, 3 });
b = numbers.FindLast(n => n > 1);

通常情况下,表达式会生成结果,并可包含在其他表达式中。 void 方法调用是不生成结果的表达式的示例。 它只能用作语句,如下面的示例所示:

Console.WriteLine("示例输出!");

其他类型的表达式

内插字符串表达式

var r = 2.3;
var message = $"半径 {r} 的圆的面积为 {Math.PI * r * r:F3}。";
Console.WriteLine(message);
// 输出:
// 半径2.3的圆的面积为16.619。

Lambda表达式

int[] numbers = { 2, 3, 4, 5 };
var maximumSquare = numbers.Max(x => x * x);
Console.WriteLine(maximumSquare);
// 输出:
// 25

查询表达式

var scores = new[] { 90, 97, 78, 68, 85 };
IEnumerable<int> highScoresQuery =
    from score in scores
    where score > 80
    orderby score descending
    select score;
Console.WriteLine(string.Join(" ", highScoresQuery));
// 输出:
// 97 90 85

可使用表达式主体定义为方法、构造函数、属性、索引器或终结器提供简洁的定义。

运算符优先级

下表按最高优先级到最低优先级的顺序列出 C# 运算符。 每行中运算符的优先级相同。

运算符类别或名称
x.y、f(x)、a[i]、x?.y、x?[y]、x++、x–、x!、new、typeof、checked、unchecked、default、nameof、delegate、sizeof、stackalloc、x->y基本
+x、-x、!x、~x、++x、–x、^x、(T)x、await、&x、*x、true 和 false一元
x…y范围
switchswitch 表达式
withwith 表达式
x * y、x / y、x % y乘法
x + y、x – y加法
x << y, x >> y移位
x < y, x > y、x <= y, x >= y、is、as关系和类型测试
x == y、x != y相等
x & y布尔逻辑 AND 或按位逻辑 AND
x ^ y布尔逻辑 XOR 或按位逻辑 XOR
x | y布尔逻辑 OR 或按位逻辑 OR
x && y条件“与”
x || y条件“或”
c ? t : f条件运算符
x = y、x += y、x -= y、x *= y、x /= y、x %= y、x &= y、x |= y、x ^= y、x <<= y、x >>= y、x ??= y、=>赋值和 lambda 声明

运算符结合性

当运算符的优先级相同,运算符的结合性决定了运算的执行顺序

int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}");  // 输出: a = 1, b = 6

操作数计算

与运算符的优先级和结合性无关,从左到右计算表达式中的操作数。
以下示例展示了运算符和操作数的计算顺序:

表达式计算顺序
a + ba, b, +
a + b * ca, b, c, *, +
a / b + c * da, b, /, c, d, *, +

关注我

感谢阅读,记得点赞关注哦

posted @ 2022-04-30 21:24  刘火火学电脑  阅读(132)  评论(0编辑  收藏  举报