一、算术运算符
以下运算符对数值类型的操作数执行算术运算:
一元:++(增量)、--(减量)、+(加)和 -(减)运算符
二元:*(乘法)、/(除法)、%(余数)、+(加法)和 -(减法)运算符
+号的作用 ①连接:当+号两边有一边是字符串的时候,+号就起到连接的作用。 ②相加:两边都是数字的时候,就变成了四则运算。 所有整型和浮点数值类型都支持这些运算符。 |
增量运算符以两种形式进行支持:后缀增量运算符 x++ 和前缀增量运算符 ++x
减量运算符以两种形式进行支持:后缀减量运算符x-- 和前缀减量运算符 --x
需要注意的是,++ 和 -- 运算符放在操作数前和操作数后是有区别的,如果放在操作数前,需要先将操作数加 1 或减 1,然后再与其他操作数进行运算;如果放在操作数后,需要先与其他操作数进行运算,然后操作数自身再加 1。
b=a++;等同于 b=a; a++; 先取值,后自增。 |
b=--a ;等同于 --a; b=a; 先自减,后取值。 |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
int a = 10;
int b = a++ + ++a * 3 + --a + a++;
Console.WriteLine(b);
Console.ReadKey();
}
}
}
//输出结果为68
备注:如果程序中不需要使用操作数原来的值,只是需要对其自身进行加减1,那么建议使用前置自加减,因为后置自加减必须先保存原来的值,而前置自加减不需要保存原来的值。
二、赋值运算符
①简单赋值运算符“=”
赋值运算符中最常见的是等号,除了等号以外还有很多赋值运算符,它们通常都是与其他运算符连用起到简化操作的作用。
由等号连接的表达式称之为赋值表达式,=表示赋值的意思,把等号右边的值赋给等号坐标的变量。
②复合赋值运算符
复合赋值运算符又称为带运算的赋值运算符,它其实是将运算符与其他运算符合并成一个运算符来使用,从而同时实现两种运算符的效果。
运算符 | 说 明 |
---|---|
+= | 加赋值,x+=y,等同于 x=x+y |
-= | 减赋值,x-=y,等同于 x=x-y |
*= | 乘赋值,x*=y,等同于 x=x*y |
/= | 除赋值,x/=y,等同于 x=x/y |
%= | 取余赋值,x%=y,等同于 x=x%y,表示求 x 除以 y 的余数 |
&= | 位与赋值,x&=y,等同于x=x&y |
|= | 位或赋值,x|=y,等同于x=x|y |
>>= | 右移赋值,x>>=y,等同于x=x>>y |
<<= | 左移赋值,x<<=y,等同于x=x<<y |
^= | 异或赋值,x^=y,等同于x=x^y |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
int a = 1;
int b = 2;
int c = 3;
Console.WriteLine(a+"a",);
Console.WriteLine(b+c);
Console.ReadKey();
}
}
}
//输出结果为1a和5
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _20220731_2
{
class Program
{
static void Main(string[] args)
{
int x = 1;
int y = 2;
y <<= x;
Console.WriteLine(y);
Console.ReadKey();
}
}
}
//结果y=4
三、比较运算符
较运算符是在条件判断中经常使用的一类运算符,包括大于、小于、不等于、大于等于、小于等于等。它返回一个代表运算结果的布尔值。当关系运算符对应的关系成立时,运算结果为true;否则为false。关系运算符通常用来条件语句中来作为判断的依据。
使用比较运算符运算得到的结果是布尔型的值,因此经常将使用比较运算符的表达式用到逻辑运算符的运算中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("88是否为偶数:" + (88 % 2 == 0));
Console.ReadKey();
}
}
}
//输出结果:88是否为偶数:True
备注:不等于运算符(!=)是与等于运算符相反的运算符,它与!(a==b) 是等效的。
三、逻辑运算符
逻辑运算符主要包括与、或、非等,它主要用于多个布尔型表达式之间的运算。
在使用逻辑运算符时需要注意逻辑运算符两边的表达式返回的结果都必须是布尔型的。
运算符 | 含义 | 说明 |
---|---|---|
&&、& | 逻辑与 | 如果运算符两边都为 True,则整个表达式为 True,否则为 False; 如果左边操作数为 False,则不对右边表达式进行计算,相当于“且”的含义 |
||、| | 逻辑或 | 如果运算符两边有一个或两个为 True,整个表达式为 True,否则为 False; 如果左边为 True,则不对右边表达式进行计算,相当于“或”的含义 |
! | 逻辑非 | 表示和原来的逻辑相反的逻辑 |
备注:&&、&与||、|的区别在于前者在计算表达式1时,而表达式2不会影响结果时,则不会计算表达式2。后者不论结果,都要对表达式1和2进行判断。一般常用前者。
表达式1 | 表达式2 | 表达式1&&表达式2 | 表达式1||表达式2 | !表达式1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 1 |
四、位运算符
所谓的位运算,通常是指将数值型的值从十进制转换成二进制后的运算,由于是对二进制数进行运算,所以使用位运算符对操作数进行运算的速度稍快。
运算符 | 说 明 |
---|---|
& | 按位与。两个运算数都为 1,则整个表达式为 1,否则为 0;也可以对布尔型的值进行比较,相当于“与”运算,但不是短路运算 |
| | 按位或。两个运算数都为 0,则整个表达式为 0,否则为 1;也可以对布尔型的值进行比较,相当于“或”运算,但不是短路运算 |
~ | 按位非,即取反运算。当被运算的值为 1 时,运算结果为 0;当被运算的值为 0 时,运算结果为 1。该操作符不能用于布尔型。对正整数取反,则在原来的数上加 1,然后取负数;对负整数取反,则在原来的数上加 1,然后取绝对值 |
^ | 按位异或。只有运算的两位不同结果才为 1,否则为 0 |
<< | 左移。把运算符左边的操作数向左移动运算符右边指定的位数,右边因移动空出的部分 补 0 |
>> | 有符号右移。把运算符左边的操作数向右移动运算符右边指定的位数。如果是正值,左侧因移动空出的部分补 0;如果是负值,左侧因移动空出的部分补 1 |
>>> | 无符号右移。和 >> 的移动方式一样,只是不管正负,因移动空出的部分都补 0 |
在上面列出的运算符中比较常用的是左移运算符和右移运算符,左移 1 位相当于将操作数乘 2,右移 1 位相当于将操作数除 2。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("2的立方为:" + (2 << 3));
Console.ReadKey();
}
}
}
//结果:
//2的4次方为:16
五、三元运算符(条件运算符)
三元运算符也被称为条件运算符,与后面要学习的 if 条件语句非常类似。
在C#语言中三元运算符只有一个,具体的语法形式如下。
布尔表达式 ? 表达式 1: 表达式 2
其中:
- 布尔表达式:判断条件,它是一个结果为布尔型值的表达式。
- 表达式 1:如果布尔表达式的值为 True,该三元运算符得到的结果就是表达式 1 的运算结果。
- 表达式 2:如果布尔表达式的值为 False,该三元运算符得到的结果就是表达式 2 的运算结果。
需要注意的是,在三元运算符中表达式 1 和表达式 2 的结果的数据类型要兼容。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("10为:" + (10 % 2 == 0 ? "偶数" : "奇数"));
Console.ReadKey();
}
}
}
//结果:
//10为偶数
六、运算符的优先级
前面介绍了 C# 中基本的运算符,在表达式中使用多个运算符进行计算时,运算符的运算有先后顺序。
如果想改变运算符的运算顺序必须依靠括号。运算符的优先级如下表所示,表中显示的内容是按优先级从高到低排序的。
运算符 | 结合性 |
---|---|
.(点)、()(小括号)、[](中括号) | 从左到右 |
+ (正)、-(负)、++ (自增)、--(自减)、~(按位非)、!(逻辑非) | 从右到左 |
* (乘)、/ (除)、% (取余) | 从左向右 |
+ (加)、-(减) | 从左向右 |
<<、>>、>>> | 从左向右 |
<、<=、>、>= | 从左向右 |
==、!= | 从左向右 |
& | 从左向右 |
| | 从左向右 |
^ | 从左向右 |
&& | 从左向右 |
|| | 从左向右 |
?: | 从右到左 |
=、+=、-=、*=、/=、%=、&=、|=、^=、~=、<<=、>>=、>>>= | 从右到左 |
尽管运算符本身已经有了优先级,但在实际应用中还是建议读者尽量在复杂的表达式中多用括号来控制优先级,以增强代码的可读性。