表达式-数学运算符
介绍完声明和初始化变量,下面该处理它们了。C#包含许多进行这类处理的运算符,包括前面使用过的=赋值运算符,把变量和字面值与运算符符合起来,就可以创建表达式,它是计算的基本建立块。
运算符的范围有简单的,也有非常复杂的。其中一些可能只在数学应用程序中使用。简单的操作包括所有的基本计算操作,而复杂的操作则包括通过变量里的内容的二进制表示来处理它们。还有专门用于处理布尔值的逻辑运算符。
运算符大致分为3类。
一元运算符,处理一个操作数
二元运算符,处理两个操作数
三元运算符,处理三个操作数
大多数运算符都是二元运算符,只有几个一元运算符和一个三元运算符,即条件运算符(条件运算符返回布尔值)。
数学运算符只包括一元运算符和二元运算符,共有5个,其中2个有二元和一元两种形式。
+(二元):表示两数相加。
-(二元):表示两数相减。
*(二元):表示两数相乘。
/(二元):表示两数相除。
%(二元):表示两数相除的余数(求模)
+(一元):表示变量1的值等于变量2的值
-(一元):表示变量1的值等于变量2的值除/乘以-1
+(一元)运算符有点奇怪,因为它对结果没有影响。它不会把值改成正的;如果变量2是-1,则+变量2仍是-1。但这是一个普遍认可的运算符,所以也把它包含进来。最常用的是你可以定制它的操作,在运算符的重载时会介绍它。
上面都是简单的数值类型,因为使用其他简单类型,结果可能不太清晰。如果把两个布尔值加在一起会得到什么结果?此时,如果对bool变量使用+或其他数学运算符,编译器就会报错。char变量的相加也会让人搞不懂。记住,char变量实际上存储的就是数字,所以把两个char变量加在一起也会得到int类型的数字。这是一个隐式转换的例子,稍后会介绍这些,因为它也可以用到三个变量混合类型的情况。
二元运算符+在用于字符串类型变量时也是有意义的,表示两个字符串的连接值,但其他数学运算符不能用于字符串的处理。
这里介绍另外两个运算符是递增和递减运算符。它们都是一元运算符,可以以两种方式使用:放在操作数前面或后面。
++:var1的值是var2+1,var递增1(var1=++var2)
--:var1的值是var2-1,var2递减1(var1=--var2)
++:var1的值是var2,var2递增1(var1=var2++)
--:var1的值是var2,var2递减1(var1=var2--)
这里的关键因素是这些运算符总是改变存储在操作数中的值。
*++总是使操作数加1
*--总是使操作数减1
var1中存储的结果有区别,其原因是运算符的位置决定了它什么时候发挥作用。吧运算符放在操作数前面,则操作数是在进行任何其他计算前受到运算符的影响,而把运算符放在操作数后面,则操作数是在完成表达式的计算后才起作用。
考虑下面的代码:
int var1,var2 = 5,var3 = 6;
var1 = var2++ * --var3;
答案是25。
下面做一个例子,说明如何使用数学运算符,并介绍另外两个有用的概念。代码提示用户输入一个字符串和两个数字,然后显示计算结果:
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace ConsoleApplication3
6 {
7 class Program
8 {
9 static void Main(string[] args)
10 {
11 double firstNumber, secondNumber;
12 string userName;
13
14 Console.WriteLine("请输入用户名:");
15 userName = Console.ReadLine();//将用户输入的用户名存储在变量userName中
16 Console.WriteLine("欢迎 {0}!",userName);
17
18 Console.WriteLine("请输入一个数字:");
19 firstNumber = Convert.ToDouble(Console.ReadLine());//将用户输入的第一个数字转换成double类型,并存储在firstNumber中
20
21 Console.WriteLine("请输入第二个数字");
22 secondNumber = Convert.ToDouble(Console.ReadLine());//将用户输入的第二个数字转换成double类型,并存储在secondNumber中
23
24 Console.WriteLine("{0}+{1}={2}",firstNumber,secondNumber,firstNumber + secondNumber);
25 Console.WriteLine("{0}-{1}={2}", firstNumber, secondNumber, firstNumber - secondNumber);
26 Console.WriteLine("{0}*{1}={2}", firstNumber, secondNumber, firstNumber * secondNumber);
27 Console.WriteLine("{0}/{1}={2}", firstNumber, secondNumber, firstNumber / secondNumber);
28 Console.WriteLine("{0}%{1}={2}", firstNumber, secondNumber, firstNumber % secondNumber);
29 Console.ReadKey();
30 }
31 }
32 }
33