C#之表达式与运算符

简介: C#之表达式与运算符

C#之表达式与运算符

表达式在C#中应用广泛,尤其是计算功能,往往需要大量的表达式。大多数表达式都使用运算符,运算符结合一个或一个以上的操作数,便形成了表达式,并且返回运算结果。

1.1表达式

表达式是由运算符和操作数组成的。例如,“+”“-”“/”和“*”都是运算符,操作数包括文本、常量、变量和表达式等。C#中,如果表达式最终的计算结果为所需类型值,则表达式可以出现在需要值或对象的任意位置。下面是一个简单的控制台应用程序,声明两个变量,并且赋初始值,然后进行简单的运算。

namespace Test01
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 92;                                                                                  //声明一个int类型的变量i并初始化为92
            int j = 11;                                                                                  //声明一个int类型的变量j并初始化为11
            Console.WriteLine(Math.Sin(i * i + j * j));                                           //表达式作为参数输出
            Console.ReadLine();
        }
    }
}

1.2运算符

运算符是一种特殊的符号,主要用于数学函数、一些类型的赋值语句和逻辑比较运算。C#中提供了丰富的运算符,如算术运算符、赋值运算符、比较运算符等。

1.2.1 算术运算符

“+”“-”“/”“*”“%”运算符都称为算术运算符,分别用于加、减、除、乘和模运算。其中,“+”“-”运算符还可以作为数据的正负符号。下面演示做一个简易的计算器程序。

 class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "简易计算器";//设置控制台标题
            Console.Write("输入第1个数字:");//提示用户输入第1个数值
            double d = double.Parse(Console.ReadLine());//得到第1个数值
            Console.Write("输入第2个数字:");//提示用户输入第2个数值
            double d2 = double.Parse(Console.ReadLine());//得到第2个数值
            Console.Write("输入第3个数字:");//提示用户输入第3个数值
            double d3 = double.Parse(Console.ReadLine());//得到第3个数值
            Console.WriteLine("加法计算结果:{0} + {1} + {2} = {3}", d, d2, d3, d + d2 +  d3);
            Console.WriteLine("减法计算结果:{0} - {1} - {2} = {3}", d, d2, d3, d - d2 -  d3);
            Console.WriteLine("乘法计算结果:{0} × {1} × {2} = {3}", d, d2, d3, d * d2 *  d3);
            Console.WriteLine("除法计算结果:{0} ÷ {1} ÷ {2} = {3}", d, d2, d3, d / d2 /  d3);
            Console.WriteLine("求余计算结果:{0} % {1} % {2} = {3}", d, d2, d3, d % d2 %  d3);
            Console.ReadLine();//等待回车继续
        }
    }

注意:

在用算术运算符(+、-、/、*)运算时,产生的结果可能会超出所涉及数值类型的值的范围,这样,会导致运行结果不正确;另外,在执行除法和求余数运算时,除数一定不能为0。

1.2.2 自增自减运算符

使用算术运算符时,如果需要对数值型变量的值进行加1或者减1操作。C#还提供了自增自减运算符,他们分别用++和–表示,例如a++,b–。如果程序中不需要使用操作数原来的值,只是需要其自身进行加(减)1;那么建议使用前置自加(减),因为后置自加(减)必须保存原来的值,而前置自加(减)不需要保存原来的值。同时在这里还要说明一点自增自减运算只能作用于变量,下面我进行一个简单的演示来进行解释

class Program
    {
        static void Main(string[] args)
        {
            int i = 1, j = 1;                             //定义int类型的变量
            int p_i, p_j;                                 //p_i表示后置形式运算的返回结果,p_j表示前置形式运算返回结果
            p_i = i++;                                    //后置形式的自增,p_i是1
            Console.WriteLine(i);                         //输出结果是2
            p_j = ++j;                                    //前置形式的自增,p_j是2
            Console.WriteLine(j);                         //输出结果是2
        }
    }

1.2.3 赋值运算

赋值运算为变量、属性、事件等元素赋新值。赋值运算符主要有“=”“+=”“-=”“*=”“/=”“%=”“&=”“|=”“^=”“<<=”“>>=”运算符。赋值运算符的左边必须是变量、属性访问、索引器访问或事件访问类型的表达式,如果赋值运算符两边操作的类型不一致,就需要首先进行类型转换,然后再赋值。下面我以加赋值(+=)运算符为例,进行一个简单的演示

class Program
    {
        static void Main(string[] args)
        {
            int i = 92;                                                            //声明一个int类型的变量i并初始化为92
            i += 12;                                                       //使用加赋值运算符
            Console.WriteLine("最后i的值为:{0}", i);               //输出最后变量i的值
            Console.ReadLine();
        }
    }

1.2.4 关系运算符

关系运算符属于二元运算符,用于程序中的变量之间、变量和自变量之间以及其他类型的信息之间的比较。关系运算符返回一个代表运算结果的布尔值。当关系成立时,返回结果为true,反之返回结果为false。下面我进行一个简单的演示

class Program
    {
        static void Main(string[] args)
        {
            int num1 = 4, num2 = 7, num3 = 7;//定义3个int变量,并初始化
            //输出3个变量的值
            Console.WriteLine("num1=" + num1 + " , num2=" + num2 + " , num3=" + num3);
            Console.WriteLine();                                    //换行
            Console.WriteLine("num1<num2的结果:" + (num1 < num2)); //小于操作
            Console.WriteLine("num1>num2的结果:" + (num1 > num2)); //大于操作
            Console.WriteLine("num1==num2的结果:" + (num1 == num2));   //等于操作
            Console.WriteLine("num1!=num2的结果:" + (num1 != num2));   //不等于操作
            Console.WriteLine("num1<=num2的结果:" + (num1 <= num2));   //小于等于操作
            Console.WriteLine("num2>=num3的结果:" + (num2 >= num3));   //大于等于操作
            Console.ReadLine();
        }
    }

运算结果如下:

num1=4 , num2=7 , num3=7
num1<num2的结果:True
num1>num2的结果:False
num1==num2的结果:False
num1!=num2的结果:True
num1<=num2的结果:True
num2>=num3的结果:True

1.2.5 逻辑运算符

返回类型为布尔值的表达式,可以被组合再一起构成一个更复杂的表达式,这是通过逻辑运算符来实现的。C#中的逻辑运算符主要包括“&(&&)(逻辑与)”“||(逻辑或)”“!(逻辑非)”。逻辑运算符的操作元必须是bool型数据。在逻辑运算符中,除了“!”是一元运算符之外,其他都是二元运算符。结果为bool类型的变量或表达式可以通过逻辑运算符组合为逻辑表达式。

1.2.6其他特殊运算符

1.is运算符

用于检查变量是否为指定的类型。如果是,返回为true,反之返回false。下面我进行一个简单的演示

class Program
    {
        static void Main(string[] args)
        {
            int i = 1;                                                                            //声明整型变量i
            bool result = i is int;                                                               //判断i是否为整型
            Console.WriteLine(result);                                                            //输出结果
            Console.ReadLine();
        }
    }
}

不能重载is运算符。is运算符只考虑引用转换、装箱转换和取消装箱转换,不考虑其他转换,如用户定义的转换。

2.条件运算符

条件运算符(?:)根据布尔类型表达式的值返回两个值中的其中一个。如果结果为true,则计算第一个表达式并以它的计算结果为准,反之则以第二个为准下面是表达格式

条件式?值1:值2

下面进行一个简单的演示

static void Main(string[] args)
        {
            Console.Write("请输入一个年份:");                                     //屏幕输入提示字符串
            string str = Console.ReadLine();                                       //获取用户输入的年份
            int year = Int32.Parse(str);                                                  //将输入的年份转换成int类型
            //计算输入的年份是否为闰年
            bool isleapyear = ((year % 400) == 0) || (((year % 4) == 0) && ((year % 100)  != 0));
            //利用条件运算符输入“是”或者“不是”
            string yesno = isleapyear ? "是" : "不是";
            Console.WriteLine("{0}年{1}闰年", year, yesno);                //输出结果
            Console.ReadLine();
        }

3.new运算符

new运算符用于创建一个新的类型实例,它有以下3种形式。

  • 对象创建表达式,用于创建一个类类型或值类型的实例。
  • 数组创建表达式,用于创建一个数组类型实例。
  • 代表创建表达式,用于创建一个新的代表类型实例。
  • 4.typeof运算符
  • 用于获得系统原型对象的类型,也就是Type对象。Type类包含关于值类型和引用类型的信心。typeof运算符可以在C#语言的各种位置使用,以找出关于引用类型和值类型的信息。

1.3运算符优先级

C#中的表达式是使用运算符连接起来的符合C#规范的式子。运算符的优先级决定了表达式中运算执行的先后顺序。优先级由高到低的顺序依次是:增量和减量运算→算术运算→关系运算→赋值运算。以上是表达式和运算符的总结。希望对大家了解表达式和运算符有用。


相关文章
|
6月前
|
开发框架 .NET 编译器
C# 10.0中Lambda表达式的改进:更简洁、更灵活的代码编写体验
【1月更文挑战第21天】随着C#语言的不断发展,Lambda表达式作为一种简洁、高效的函数式编程工具,在C# 10.0中迎来了重要的改进。本文将详细探讨C# 10.0中Lambda表达式的新特性,包括参数类型的推断增强、自然类型的Lambda参数以及Lambda表达式的属性改进等。这些改进不仅简化了Lambda表达式的编写过程,还提升了代码的可读性和灵活性,为开发者带来了更优质的编程体验。
|
10天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
19 3
|
9天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
24 1
|
7天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
7 0
|
1月前
|
C# 开发者
【捞底干货】C#中equals和==运算符的区别
【捞底干货】C#中equals和==运算符的区别
19 1
|
2月前
|
开发框架 自然语言处理 .NET
C#一分钟浅谈:LINQ 查询表达式的使用技巧
【9月更文挑战第6天】LINQ(Language Integrated Query)是C#开发中的强大工具,使查询数据集合变得简单且接近自然语言。本文从基础入手,通过具体示例讲解LINQ查询表达式的使用技巧,包括过滤、排序和分组等操作。同时,文章还探讨了常见问题及解决方法,如性能优化、过早枚举和类型转换等,帮助开发者写出更高效、易维护的代码。
90 15
|
2月前
|
C#
C#一分钟浅谈:Lambda 表达式和匿名方法
本文详细介绍了C#编程中的Lambda表达式与匿名方法,两者均可用于定义无名函数,使代码更简洁易维护。文章通过基础概念讲解和示例对比,展示了各自语法特点,如Lambda表达式的`(parameters) =&gt; expression`形式及匿名方法的`delegate(parameters)`结构。并通过实例演示了两者的应用差异,强调了在使用Lambda时应注意闭包问题及其解决策略,推荐优先使用Lambda表达式以增强代码可读性。
39 8
|
4月前
|
SQL 开发框架 前端开发
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
|
5月前
|
C# 数据库
C#中的空合并运算符与空合并赋值运算符:简化空值处理
C#中的空合并运算符与空合并赋值运算符:简化空值处理
|
6月前
|
C#
C#动态查询:巧用Expression组合多条件表达式
在C#中,利用`Expression`类和`AndAlso`、`OrElse`方法,可以组合两个`Expression&lt;Func&lt;T, bool&gt;&gt;`以实现动态多条件查询。该方法通过构建表达式树,方便地构建复杂查询。示例代码展示了如何创建表达式树,分别检查年龄大于等于18和姓名为&quot;John&quot;的条件,并使用`AndAlso`组合这两个条件,最终编译为可执行的委托进行测试。
238 1