C# 运算符与表达式

算数运算符与表达式

C#中的算术运算符包括基本算术运算符和自增自减运算符。由算术运算符、操作数和括号构成的表达式称为算术表达式。
算数运算符
注意:

  • “-”作为负号时是一元运算。如 a*-b 可以理解为 a*(-b)。

  • %号的作用是整数除法中产生余数,其优先级与“/”相同。

  • 当”/”用于两个整型数据相除时,其结果是取商的整数数部分,而不是四舍五入。

  • “+”除用于算术运算外,也可以用于字符串的链接运算。

  • “++”和“- -”使用方便且使用效率很高的两个运算符,它们都是一元运算符号。它们有前置和后置两种使用形式。无论前置还是后置,其作用都是将操作数的值增 1(减 1)后重新赋值给操作数。如果自增、自减运算的结果要被用来参与其它操作时,前置和后置就有区别了。
    如:
    j=++i; 等价于执行了下面的语句序列:
    i++;
    j=i;
    而 j=i++;等价于执行了下面的语句序列:
    j=i;
    i++;

赋值运算符及表达式

赋值操作符“=”的含义是:取右边的值(右值),然后赋值给左边(左值)。右值可以是任何常数,变量或者表达式,或者是任意可以产生值的方法。但左边必须是一个明确的以命名的变量。

带有赋值运算符的表达式称为赋值表达式。如 n=n+5 就是一个赋值表达式。赋值表达式的作用就是将赋值符号右边表达式的值赋值给左边的对象。赋值表达式的类型为左边对象的类型,其结果为左边对象赋值后的值,运算的结合性为自右向左

除了基本赋值运算符外,还有复合运算符,复合运算符就是在“=”之前加上其它算术运算符。如:
a+=b 等价于 a=a+b
同样,也可以把表达式的通过复合赋值运算符赋值给变量。
赋值运算符

关系运算符及表达式

常用的关系运算符:在这里插入图片描述
用关系运算符将两个表达式链接起来,就是关系表达式。关系运算是比较简单的一种逻辑运算,其结果类型为 bool, 值只能是 true 或 false,适合于所有基本数据类型。

关系运算符号的优先级为:
<、<=、>、>= 优先级相同(较高)
== 、!= 优先级相同(较低)

应注意的是在程序上对浮点数的比较是非常严格的,不能简单的用“==”或“!=”进行浮点数的比较。

逻辑运算符号及表达式

逻辑运算符包括与(&&)或(||)非(!),操作只能应用于布尔值,如果在应该是 String值的地方使用了 bool 的话,布尔值会自动转换成适当的形式。
在这里插入图片描述
短路原则:当使用逻辑操作符的时候会遇到一种短路状况,即一但能够明确无误地确定整个表达式的值,就不再计算表达式余下的部分了。因此,整个逻辑表达式靠后的部分有可能不再计算。

位运算符与表达式

位运算符表示了对操作数进行的位运算,位运算是指进行二进制位的运算。在这里插入图片描述

条件运算符与条件表达式

条件运算符,根据布尔型表达式的值返回两个值中的一个。条件运算符的格式如下:

表达式 1?表达式 2:表达式 3

功能:如果条件为 true,则计算表达式 2 并以它的计算结果为准;如果为 false,则计算表达式 3 并以它的计算结果为准。只计算表达式 2 或表达式 3 中的一个。
说明:

  • 表达式 1 必须是 bool 类型,表达式 2 和表达式 3 可以是任何类型,且类型可以不同。

  • 使用条件运算符,可以更简洁、雅观地表达那些否则可能要求 if-else 结构的计算。

  • 条件运算符的优先级高于赋值运算符,低于逻辑运算符;结合方向为自右向左。因此该形式的表达式
    a ? b : c ? d : e
    按如下规则计算:
    a ? b : (c ? d : e)
    而不是按照下面这样计算:
    (a ? b : c) ? d : e

  • 不能重载条件运算符。

其他运算符

测试运算符is

is 是获取类型信息的运算符。is 运算符用于检查对象运行时的类型,即判定某变量是否为某个类型,其结果为布尔值 true 或 false。is 表达式的格式是:

<变量名或常量名> is <类型>

如果<变量名或常量名>的数据类型和<类型>相同或者相容,则 result 的值为 true;否则,result 的值为 false。

as运算符

As运算符用于进行相关数据类型的判定,as 表达式的格式为:

<表达式1>=<表达式2> as <数据类型>;

其功能是:如果表达式2的值符合给定的<数据类型>,则将表达式2的值赋值给表达式1,否则表达式1为null。
其中:“表达式1”和“表达式”必须是一个引用类型的变量,或通过运算得到的引用类型的结构,如对象类型、字符串类型等。“数据类型”符合各种C#的数据类型。

typeof运算符

typeof运算表达式返回一个表示特定类型的System.Type对象。System.Type是描述类型信息的类,所以可以用System.Type类的对象来检索该类型的完整信息。Typeof表达式格式为:

Type 变量=typeof(类型)

功能相当于:
变量=new 变量类型;
变量.GetType() //object类型的GetType方法,返回变量的数据类型。
例如,typeof(int) 返回表示System.int32类型的Type对象,typeof(string) 返回表示System.String类型的Type对象。该运算符在使用反射动态查找对象信息时很有用。

sizeof运算符

sizeof是C# 语言的一种一元运算符,它并不是函数。sizeof运算符以字节形式给出了其操作数的存储大小。操作数可以是一个类型名,操作数的存储大小由操作数的数据类型决定。其格式为:

Sizeof(变量类型)//返回一个整数,表示变量所占字节数。

new运算符

new操作符可以创建值类型变量、引用类型对象,同时自动调用构造函数。其格式:

变量名=new 类型名

例如:
int x=new int();//用 new 创建整型变量 x,调用默认构造函数
Person C1=new Person ();//用 new 建立的 Person 类对象。Person 变量 C1 对象的引用
int[] arr=new int[2];//数组也是类,创建数组类对象,arr 是数组对象的引用
注意:int x=new int()语句将自动调用int结构不带参数的构造函数,给x赋初值0,x仍是值类型变量,不会变为引用类型变量。

运算符的优先级

在这里插入图片描述

C#中,你可以使用内置的`System.Linq.Expressions`命名空间下的`Expression`类及其派生类来解析和计算数学表达式。这里是一个简单的示例,展示如何构建和求解一个加法表达式的求值: ```csharp using System; using System.Linq.Expressions; public class ExpressionEvaluator { public double Evaluate(string expression) { // 创建一个表达式树解析器 var parser = new ExpressionTreeParser(expression); // 将输入字符串转换为Lambda表达式 Func<double, double, double> lambda = parser.Parse(); // 创建一个匿名函数来获取结果 return lambda(2, 3); // 这里可以替换为你想要求值的具体数值 } } class ExpressionTreeParser { private readonly string _expression; public ExpressionTreeParser(string expression) { _expression = expression; } public Func<double, double, double> Parse() { // 使用 LINQ 表达式来解析并构建加法操作 var parameters = Expression.Parameter(typeof(double), "x"); var constant = Expression.Constant(0, typeof(double)); var add = Expression.Add(parameters, constant); // 返回一个 Lambda 表达式,接受两个double参数并返回它们的和 return Expression.Lambda<Func<double, double, double>>(add, parameters).Compile(); } } // 使用示例 var evaluator = new ExpressionEvaluator(); Console.WriteLine(evaluator.Evaluate("x + 3")); // 输出:5 ``` 在这个例子中,我们首先创建了一个表达式树解析器,然后通过传入的数学表达式构建了一个Lambda表达式。Lambda表达式代表了原始的算术运算,最后编译它以便可以实际执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值