数学运算符
有5个简单的数学运算符,其中两个( + 和 - )有二元和一元两种形式。表 3-6
列出了这些运算符,并用一个简短示例来说明它们的用法,以及使用简单的数值类型(整数和浮点型)时它们的结果。
表3-6 简单的数学运算符
运算符 | 类别 | 示例表达式 | 结果 |
---|---|---|---|
+ | 二元 | var1 = var2 + var3; | var1 的值是 var2 与 var3 的和 |
- | 二元 | var1 = var2 - var3; | var1 的值是从 var2 减去 var3 所得的值 |
二元 | var1 = var2 var3; | var1 是 var2 与 var3 的乘积 | |
/ | 二元 | var1 = var2 / var3; | var1 是 var2 除以 var3 所得的值 |
% | 二元 | var1 = var2 % var3; | var1 的值是 var2 除以 var3 所得的余数 |
+ | 一元 | var1 = +var2; | var1 的值等于 var2 的值 |
- | 一元 | var1 = -var2; | var1 的值等于 var2 的值乘以 -1 |
- ( 一元 )运算符有点古怪,因为它对结果没有影响。它不会把值变成正的:如果 var2 是 -1,则 +var2 仍是 -1。但这是一个得到普遍认可的运算符,所以也把它包含进来。这个运算符最有用的方面是,可以定制它的操作,本书在后面探讨运算符的重载时会介绍它。
上面的示例都使用简单的数值类型,因为使用其他简单类型,结果可能不太清晰。例如把两个布尔值加在一起,会得到什么结果?因此,如果对 bool
变量使用 +
(或其他数学运算符),编译器会报错。char
变量加在一起也会得到一个数字(其类型为int)。这是一个隐式转换的示例,稍后将详细介绍这个主题和显式转换,因为它也可以应用到 var1、var2 和 var3 是混合类型的情况。
二元运算符 + 在用于字符串类型变量时也是有意义的。此时,它的作用 如表 3-7 所示
。
表3-7 字符串连接运算符
运算符 | 类别 | 示例表达式 | 结果 |
---|---|---|---|
+ | 二元 | var1 = var2 + var3; | var1 的值是存储在 var2 和 var3 中的两个字符串的连接值 |
但其他数学运算符不能用于处理字符串。
这里应介绍的另两个运算符是递增运算符和递减运算符,它们都是一元运算符,可通过两种方式加以使用:放在操作数的前面或后面。简单表达式的结果 如表 3-8 所示
。
表3-8 简单表达式的结果
运算符 | 类别 | 示例表达式 | 结果 |
---|---|---|---|
++ | 一元 | var1 = ++var2; | var1 的值是 var2 + 1, var2 递增1 |
— | 一元 | var1 = —var2; | var1 的值是 var2 - 1, var2 递减1 |
++ | 一元 | var1 = var2++; | var1 的值是 var2, var2 递增1 |
— | 一元 | var1 = var2—; | var1 的值是 var2, var2 递减1 |
这些运算符改变存储在操作数中的值。- ++ 总是使操作数加 1- — 总是使操作数减 1
var1 中存储的结果有区别,其原因是运算符的位置决定了它什么时候发挥作用。把运算符放在操作数的前面,则操作数是在进行任何其他计算前受到运算符的影响,而把运算符放在操作数的后面,则操作数是在完成表达式的计算后受到运算符的影响。
再看一个示例。考虑以下代码:
int var1, var2 = 5, var3 = 6;
var1 = var2++ * --var3;
要把什么值赋予 var1 在计算表达式前,var3 前面的运算符 — 会起作用,把它的值从 6 改为 5。可以忽略 var2 后面的 ++ 运算符,因为它是在计算完成后才发挥作用,所以 var1 的结果是 5 与 5 乘积,即 25。
许多情况下,这些简单的一元运算符使用起来非常方便,它们实际上是下述表达式的简写形式:
var1 = var1 + 1;
这类表达式有许多用途,特别适合于在循环中使用,这将在第4章讲述。下面的示例说明如何使用数学运算符,并介绍另外两个有用的概念。代码提示用户键入一个字符串和两个数字,然后显示计算结果。
在 Program.cs 中添加如下代码:
static void Main(string[] args)
{
double firstNumber, secondNumber;
string userName;
Console.WriteLine("Enter your name:");
userName = Console.ReadLine();
Console.WriteLine("Welcome {0}!", userName);
Console.WriteLine("Now give me a number:");
firstNumber = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Now give me another number:");
secondNumber = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("The sum of {0} and {1} is {2}.",
firstNumber, secondNumber, firstNumber + secondNumber);
Console.WriteLine("The result of subtracting {0} from {1} is {2}.",
secondNumber, firstNumber, firstNumber - secondNumber);
Console.WriteLine("The product of {0} and {1} is {2}.",
firstNumber, secondNumber, firstNumber * secondNumber);
Console.WriteLine("The result of diviing {0} by {1} is {2}.",
firstNumber, secondNumber, firstNumber / secondNumber);
Console.WriteLine("The remainder after dividing {0} by {1} is {2}.",
firstNumber, secondNumber, firstNumber % secondNumber);
Console.ReadKey();
}
示例的说明除了演示数学运算符外,这段代码还引入了两个重要概念,在以后的示例中将多次用刀这些概念。- 用户输入- 类型转换用户输入使用与前面 Console.WriteLine( ) 命令类似的语法。但这里使用 Console.ReadLine( )。这个命令提示用户输入信息,并把它们存储在 string 变量中。
string userName;
Console.WriteLine("Enter your name:");
userName = Console.ReadLine();
Console.WriteLine("Welcome {0}!", userName);
这段代码直接将赋值变量 userName 的内容写到屏幕上。这个示例还读取了两个数字。这有些复杂,因为 Console.ReadLine( ) 命令生成一个字符串,而我们希望得到一个数字,所以这就引入了类型转换的问题。第5章将详细讨论类型转换,下面首先分析使用的代码。 首先声明要存储数字的变量:
double firstNumber, secondNumber;
接着给出提示,对 Console.ReadLine( ) 得到的字符串使用命令 Convert.ToDouble( ),把字符串转换为 double 类型,把这个数值赋给前面声明的变量firstNumber
:
Console.WriteLine("Now give me a number:");
firstNumber = Convert.ToDouble(Console.ReadLine());
这个语法相当简单,其他许多转换也用类似的方式进行。 其余代码按同样方式获取第二个数:
Console.WriteLine("Now give me another number:");
secondNumber = Convert.ToDouble(Console.ReadLine());
然后输出两个数字的加、减、乘、除的结果,并用余数运算符( % )显示除操作的余数。
Console.WriteLine("The sum of {0} and {1} is {2}.",
firstNumber, secondNumber, firstNumber + secondNumber);
Console.WriteLine("The result of subtracting {0} from {1} is {2}.",
secondNumber, firstNumber, firstNumber - secondNumber);
Console.WriteLine("The product of {0} and {1} is {2}.",
firstNumber, secondNumber, firstNumber * secondNumber);
Console.WriteLine("The result of diviing {0} by {1} is {2}.",
firstNumber, secondNumber, firstNumber / secondNumber);
Console.WriteLine("The remainder after dividing {0} by {1} is {2}.",
firstNumber, secondNumber, firstNumber % secondNumber);
注意,我们提供了表达式 firstNumer + secondNumber 等,作为 Console.WriteLine( )语句的一个参数,而没有使用中间变量:
Console.WriteLine("The sum of {1} and {1} is {2}.", firstNumber, secondNumber, firstNumber + secondNumber);
这种语法可以提高代码的可读性,并减少需要编写的代码量。