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#规范的式子。运算符的优先级决定了表达式中运算执行的先后顺序。优先级由高到低的顺序依次是:增量和减量运算→算术运算→关系运算→赋值运算。以上是表达式和运算符的总结。希望对大家了解表达式和运算符有用。