运算符是每一种编程语言中必备的符号,如果没有运算符,那么编程语言将无法实现任何运算。
运算符主要用于执行程序代码运算,例如加法、减法、大于、小于等。
下面我们将介绍算术运算符、逻辑运算符、比较运算符、三元运算符以及运算符的优先级。
算术运算符
算术运算符是最常用的一类运算符,包括加法、减法、乘法、除法等。
运算符 | 说明 |
+ |
对两个操作数做加法运算 |
- |
对两个操作数做减法运算 |
* |
对两个操作数做乘法运算 |
/ |
对两个操作数做除法运算 |
% |
对两个操作数做取余运算 |
注意
- 当对两个字符串类型的值使用
+
运算符,代表的是两个字符串值的连接,例如"123"+"456"
的结果为"23456"
。 - 当使用
/
运算符时也要注意操作数的数据类型,如果两个操作数的数据类型都为整数,那么结果相当于取整运算,不包括余数;而两个操作数中如果有一个操作数的数据类型为浮点数,那么结果则是正常的除法运算。 - 当使用
%
运算符时,如果两个操作都为整数,那么结果相当于取余数。经常使用该运算符来判断某个数是否能被其他的数整除。
逻辑运算符
逻辑运算符主要包括 与
、 或
、 非
等,它主要用于多个布尔型表达式之间的运算。
运算符 | 含义 | 说明 |
&& |
逻辑 与 |
如果运算符两边都为 True ,则整个表达式为 True , 否则为 False ; 如果左边操作数为 False ,则不对右边表达式进行计算,相当于 “且” 的含义 |
|| |
逻辑 或 |
如果运算符两边有一个或两个为 True ,整个表达式为 True ,否则为 False ; 如果左边为 True , 则不对右边表达式进行计算,相当于 “或” 的含义 |
! |
逻辑 非 |
表示和原来的逻辑相反的逻辑 |
在使用逻辑运算符时需要注意逻辑运算符两边的表达式返回的结果都必须是布尔型的。
比较运算符
比较运算符是在条件判断中经常使用的一类运算符,包括大于、小于、不等于、大于等于、小于等于等。
运算符 | 说明 |
== |
表示两边表达式运算的结果相等,注意是两个等号 |
!= |
表示两边表达式运算的结果不相等 |
> |
表示左边表达式的值大于右边表达式的值 |
< |
表示左边表达式的值小于右边表达式的值 |
>= |
表示左边表达式的值大于等于右边表达式的值 |
<= |
表示左边表达式的值小于等于右边表达式的值 |
使用比较运算符运算得到的结果是布尔型的值,因此经常将使用比较运算符的表达式用到逻辑运算符的运算中。
位运算符
所谓的位运算,通常是指将数值型的值从十进制转换成二进制后的运算,由于是对二进制数进行运算,所以使用位运算符对操作数进行运算的速度稍快。
位运算包括与、或、 非、左移、右移等。
运算符 | 说 明 |
& |
按位与。两个运算数都为 1 ,则整个表达式为 1 ,否则为 0 ; 也可以对布尔型的值进行比较,相当于 “与” 运算,但不是短路运算 |
| |
按位或。两个运算数都为 0 ,则整个表达式为 0 ,否则为 1 ; 也可以对布尔型的值进行比较,相当于 “或” 运算,但不是短路运算 |
~ |
按位非。当被运算的值为 1 时,运算结果为 0 ; 当被运算的值为 0 时,运算结果为 1 。该操作符不能用于布尔型。对正整数取反,则在原来的数上 加1 ,然后取负数;对负整数取反,则在原来的数上 加1 ,然后取绝对值 |
^ |
按位异或。只有运算的两位不同结果才为 1 ,否则为 0 |
<< |
左移。把运算符左边的操作数向左移动运算符右边指定的位数,右边因移动空出的部分 补0 |
>> |
有符号右移。把运算符左边的操作数向右移动运算符右边指定的位数。如果是正值,左侧因移动空出的部分 补0 ; 如果是负值,左侧因移动空出的部分 补1 |
>>> |
无符号右移。和 >> 的移动方式一样,只是不管正负,因移动空出的部分都 补0 |
在上面列出的运算符中比较常用的是左移运算符和右移运算符,左移1位相当于将操作数乘2,右移1位相当于将操作数除2。
三元运算符
三元运算符也被称为条件运算符,与 if条件语句
非常类似。
在 C# 语言中三元运算符只有一个,具体的语法形式如下。
布尔表达式 ? 表达式 1: 表达式 2
其中:
布尔表达式
:判断条件,它是一个结果为布尔型值的表达式。表达式1
: 如果布尔表达式的值为True
,该三元运算符得到的结果就是表达式1的运算结果。表达式2
: 如果布尔表达式的值为False
,该三元运算符得到的结果就是表达式2的运算结果。
注意
在三元运算符中表达式1和表达式2的结果的数据类型要兼容。
赋值运算符
赋值运算符中最常见的是等号,除了等号以外还有很多赋值运算符,它们通常都是与其他运算符连用起到简化操作的作用。
运算符 | 说明 |
= |
x=y ,等号右边的值给等号左边的变量,即把变量 y 的值赋给变量 x |
+= |
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++ 或 ++x ,等同于 x=x+1 |
-- |
x-- 或 --x ,等同于 x=x-1 |
注意
++
和 --
运算符放在操作数前和操作数后是有区别的,如果放在操作数前,需要先将操作数加1或减1,然后再与其他操作数进行运算;如果放在操作数后,需要先与其他操作数进行运算,然后操作数自身再加1或减1。
运算符的优先级
在表达式中使用多个运算符进行计算时,运算符的运算有先后顺序。如果想改变运算符的运算顺序必须依靠括号。运算符的优先级如下表所示,表中显示的内容是按优先级从高到低排序的。
运算符 | 结合性 |
. (点)、 () (小括号)、 [] (中括号) |
从左到右 |
+ (正)、 - (负)、 ++ (自增)、 -- (自减)、 ~ (按位非)、 ! (逻辑非) |
从右到左 |
* (乘)、 / (除)、 % (取余) |
从左向右 |
+ (加)、 - (减) |
从左向右 |
<< 、 >> 、 >>> |
从左向右 |
< 、 <= 、 > 、 >= |
从左向右 |
== 、 != |
从左向右 |
& |
从左向右 |
| |
从左向右 |
^ |
从左向右 |
&& |
从左向右 |
|| |
从左向右 |
?: |
从右到左 |
= 、 += 、 -= 、 *= 、 /= 、 %= 、 &= 、 |= 、 ^= 、 ~= 、 <<= 、 >>= 、 >>>= |
从右到左 |
建议
尽管运算符本身已经有了优先级,但在实际应用中还是建议读者尽量在复杂的表达式中多用括号来控制优先级,以增强代码的可读性。