C#中的运算符

来源:互联网 发布:新浪中超数据库 编辑:程序博客网 时间:2024/06/05 04:36

原文地址:http://www.dingos.cn/index.php?topic=909.0

表达式是运算符和操作数的有效组合。
操作数可以是一个常量、变量及另外的一个表达式。
C# 提供大量运算符,这些运算符是指定在表达式中执行哪些操作的符号。
下面分别列出了按优先级顺序分组的 C# 运算符。每个组中如果没有特殊说明的情况下运算符具有相同的优先级。

【基本运算符】
. 运算符点运算符 (.) 用于成员访问。点运算符指定类型或命名空间的成员。
() 运算符用于指定表达式中的运算顺序;用于指定强制转换或类型转换。
[] 运算符方括号 ([]) 用于数组、索引器和属性,也可用于指针。
++ 运算符增量运算符 (++) 将操作数加 1。增量运算符可以出现在操作数之前或之后。第一种形式是前缀增量操作。该操作的结果是操作数加 1 之后的值。第二种形式是后缀增量操作。该运算的结果是操作数增加之前的值。
-- 运算符减量运算符 (--) 将操作数减 1。减量运算符可以出现在操作数之前或之后:--variable 和 variable--。第一种形式是前缀减量操作。该运算的结果是操作数减小“之后”的值。第二种形式是后缀减量操作。该运算的结果是操作数减小“之前”的值。
new 运算符用于创建对象和调用构造函数。还可用于创建匿名类型的实例。new 运算符还用于调用值类型的默认构造函数。
typeof用于获取类型的 System.Type 对象。System.Type type = typeof(int);
checkedchecked 关键字用于对整型算术运算和转换显式启用溢出检查。
uncheckedunchecked 关键字用于取消整型算术运算和转换的溢出检查。
-> 运算符-> 运算符将指针取消引用与成员访问组合在一起。

【一元运算符】
+ 运算符既可作为一元运算符也可作为二元运算符。一元 + 运算符是为所有数值类型预定义的。对数值类型进行一元 + 运算的结果就是操作数的值。
- 运算符既可作为一元运算符也可作为二元运算符。一元 - 运算符是为所有数值类型预定义的。数值类型的一元 - 运算的结果是操作数的反数。
! 运算符逻辑非运算符 (!) 是对操作数求反的一元运算符。为 bool 定义了该运算符,当且仅当操作数为 false 时才返回 true。
~ 运算符~ 运算符对操作数执行按位求补运算,其效果相当于反转每一位。按位求补运算符是为 int、uint、long 和 ulong 类型预定义的。
将操作数按位取反(0 到 1 和 1 到 0)  
true 运算符当由用户定义的类型定义时,返回 bool 值 true 以表示真,否则返回 false。这对于表示 true、false 和 null(既非 true 也非 false)的类型很有用,在数据库中使用了该运算符。
false 运算符返回布尔值 true 以指示假,否则返回 false。这对于数据库中使用的表示 true、false 和 null(既非 true 也非 false)的类型很有用。这些类型可用于控制 if、do、while 和 for 语句中以及条件表达式中的表达式。
& 运算符对于整型,& 计算操作数的逻辑按位“与”。
如果两个操作数的相应位均为 1,则该位的结果值为 1
| 运算符对于整型,| 计算操作数的逻辑按位“或”。
如果两个操作数的相应位有一个为 1,则该位的结果值为 1 
^ 运算符对于整型,^ 将计算操作数的按位“异或”。
如果参加运算的两个操作数的相应位同号,则结果为 0,异号则为 1
sizeof用于获取 值类型 的字节大小。int intSize = sizeof(int);

【乘除运算符】
* 运算符:乘法运算符 (*),用于计算操作数的积。所有数值类型都具有预定义的乘法运算符。
/ 运算符:除法运算符 (/) 用第二个操作数除第一个操作数。所有数值类型都具有预定义的除法运算符。两个整数相除的结果始终为一个整数。要获取作为有理数或分数的商,应将被除数或除数设置为 float 类型或 double 类型。可以通过在数字后添加一个小数点来隐式执行此操作。
% 运算符:计算第二个操作数除第一个操作数后的余数。所有数值类型都具有预定义的模数运算符。

【加减运算符】
+ 运算符:+ 运算符既可作为一元运算符也可作为二元运算符。为数值类型和字符串类型预定义了二元 + 运算符。对于数值类型,+ 计算两个操作数之和。当其中的一个操作数是字符串类型或两个操作数都是字符串类型时,+ 将操作数的字符串表示形式串联在一起。委托类型也提供二元 + 运算符,该运算符执行委托串联。
- 运算符:- 运算符既可作为一元运算符也可作为二元运算符。二元 - 运算符是为所有数值类型和枚举类型预定义的,其功能是从第一个操作数中减去第二个操作数。委托类型也提供二元 - 运算符,该运算符执行委托移除。

移位运算符】
<< 运算符:左移运算符 (<<) 将第一个操作数向左移动第二个操作数指定的位数。第二个操作数的类型必须是 int。如果第一个操作数是 int 或 uint(32 位数),则移位数由第二个操作数的低 5 位给出。如果第一个操作数是 long 或 ulong(64 位数),则移位数由第二个操作数的低 6 位给出。第一个操作数的高序位被放弃,低序空位用 0 填充。移位操作从不导致溢出。
>> 运算符:右移运算符 (>>) 将第一个操作数向右移动第二个操作数所指定的位数。如果第一个操作数为 int 或 uint(32 位数),则移位数由第二个操作数的低五位给出(第二个操作数 & 0x1f)。如果第一个操作数为 long 或 ulong(64 位数),则移位数由第二个操作数的低六位给出(第二个操作数 & 0x3f)。如果第一个操作数为 int 或 long,则右移位是算术移位(高序空位设置为符号位)。如果第一个操作数为 uint 或 ulong 类型,则右移位是逻辑移位(高位填充 0)。

【关系和类型检测运算符】
< 运算符:所有数值和枚举类型都定义“小于”关系运算符 (<),如果第一个操作数小于第二个操作数,该运算符返回 true,否则返回 false。
> 运算符:所有数值类型和枚举类型都定义“大于”关系运算符 >,如果第一个操作数大于第二个操作数,它将返回 true,否则返回 false。
<= 运算符:所有数值和枚举类型都定义了“小于等于”关系运算符 (<=),如果第一个操作数小于或等于第二个操作数,则该运算符将返回 true,否则返回 false。
>= 运算符:所有数值类型和枚举类型都定义“大于等于”关系运算符 >=,如果第一个操作数大于或等于第二个操作数,该运算符将返回 true,否则返回 false。
is:检查对象是否与给定类型兼容。如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true。如果已知表达式将始终是 true 或始终是 false,则 is 关键字将导致编译时警告,但是,通常在运行时才计算类型兼容性。
as:as 运算符用于在兼容的引用类型之间执行转换。

【相等运算符】
== 运算符:对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。
!= 运算符:如果操作数相等,则不等运算符 (!=) 返回 false,否则,返回 true。为所有类型(包括字符串和对象)预定义了不等运算符。对于预定义的值类型,如果操作数的值不同,则不等运算符 (!=) 返回 true,否则,返回 false。对于 string 以外的引用类型,如果两个操作数引用不同的对象,则 != 返回 true。对于 string 类型,!= 比较字符串的值。

【逻辑运算符】优先级按顺序从高到低
& 运算符(逻辑“与”):& 运算符既可作为一元运算符也可作为二元运算符。为整型和 bool 类型预定义了二进制 & 运算符。对于整型,& 计算操作数的逻辑按位“与”。对于 bool 操作数,& 计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为 true 时,结果才为 true。
^ 运算符(逻辑“异或”):对于 bool 操作数,^ 将计算操作数的逻辑“异或”;也就是说,当且仅当只有一个操作数为 true 时,结果才为 true。
| 运算符(逻辑“或”):对于 bool 操作数,| 计算操作数的逻辑“或”结果;也就是说,当且仅当两个操作数均为 false 时,结果才为 false。
&& 运算符(条件“与”):行其 bool 操作数的逻辑“与”运算,但仅在必要时才计算第二个操作数。
|| 运算符(条件“或”):执行 bool 操作数的逻辑“或”运算,但仅在必要时才计算第二个操作数。

【条件运算符】
?: 运算符:据布尔型表达式的值返回两个值中的一个。condition ? first_expression : second_expression;
如果条件为 true,则计算第一表达式并以它的计算结果为准;如果为 false,则计算第二表达式并以它的计算结果为准。只计算两个表达式中的一个。使用条件运算符,可以更简洁、雅观地表达那些否则可能要求 if-else 结构的计算。

【赋值运算符】

= 运算符:将右操作数的值存储在左操作数表示的存储位置、属性或索引器中,并将值作为结果返回。操作数的类型必须相同(或右边的操作数必须可以隐式转换为左边操作数的类型)。
通用的形式:变量名=表达式
将同一个值赋给多个变量的操作叫做多重赋值。例如:a=b=c=10
但是,不能像下面的语句中那样赋值:int a=int b=int c=10
+= 运算符:加法赋值运算符。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 & y
|= 运算符:“或”赋值运算符。x |= y等效于x = x | y
^= 运算符:“异或”赋值运算符。x ^= y等效于x = x ^ y
<<= 运算符:左移赋值运算符。x <<= y等效于x = x << y
>>= 运算符:右移赋值运算符。x >>= y等效于x = x >> y
?? 运算符:如果 ?? 运算符的左操作数非 null,该运算符将返回左操作数,否则返回右操作数。

【Lambda运算符】
=> 运算符:=> 标记称作 lambda 运算符。该标记在 lambda 表达式中用来将左侧的输入变量与右侧的 lambda 体分离。Lambda 表达式是与匿名方法类似的内联表达式,但更加灵活;在以方法语法表示的 LINQ 查询中广泛使用了 Lambda 表达式。

【运算符的优先级】
优先级建立了计算算术表达式时,一组运算符相对于另一组的层次关系
优先级指计算运算符的顺序
可通过将表达式括在括号中来改变运算符的优先级

运算符类型
运算符
结合律
一元
- ++ --
从右向左
二元
^
从左向右
二元
* / %
从左向右
二元
+ -
从左向右
二元
=
从右向左
当一个表达式中的运算符具有相同优先级时,结合律还指出C语言计算这些运算符的顺序。
示例:-8*4%2-3
计算顺序:
完成的操作结果-8(一元减法)-8-8*4-32-32%400-3-3
【逻辑运算符优先级】
由高到低:非、与、或
当条件中有多个逻辑运算符时,计算将从右向左进行
示例:false || true && !false && true
计算顺序:
1. false || true && [!false]true && true - “非”的优先级最高
2. false || true && [true && true] - “与”是最高的运算符,具有相同优先级的运算符从右向左计算
3. false || [true && true]
4. [false || true]
5. true

【运算符之间的优先级】
当公式中含有多种类型的运算符时,必须确立不同类型运算符之间的优先级顺序。一般来说优先级有高到低:算术、比较、逻辑。
示例:2*3+4/2>3 && 3<5 || 10<9
1. [2*3+4/2]>3 && 3<5 || 10<9 - 首先计算算术运算符
2. [[2*3]+[4/2]]>3 && 3<5 || 10<9
3. [6+2]>3 && 3<5 || 10<9
4. [8>3] && 3<5 || 10<9 - 比较运算符,计算总左到右进行
5. true && true || false - 最后计算逻辑运算符
6. [true && true] || false
7. true || false
8. true

【修改优先级】
  • 括号 ( ) 的优先级最高。
  • 使用括号 ( ) 可修改运算符的优先级。
  • 用括号括起来的优先级较低的运算符具有最高的优先级,最先执行。
  • 在括号嵌套 ( ( ( ) ) )  的情况下,最里层的最先执行。
  • 包含多个括号的表达式从左向右进行计算。
示例: 5+9*3^2-4 > 10 && (2+2^4-8/4 > 6 || (2<6 && 10>11))
1. 5+9*3^2-4 > 10 && (2+2^4-8/4 > 6 || (true && false) - 里层括号的优先级大于其他所有的运算符
2. 5+9*3^2-4 > 10 && (2+2^4-8/4 > 6 || false)
3. 5+9*3^2-4 > 10 && (2+16-8/4 > 6 || false)
4. 5+9*3^2-4 > 10 && (2+16-2 > 6 || false)
5. 5+9*3^2-4 > 10 && (18-2 > 6 || false)
6. 5+9*3^2-4 > 10 && (16 > 6 || false)
7. 5+9*3^2-4 > 10 && (true || false)
8. 5+9*3^2-4 > 10 && true
9. 5+9*9-4 > 10 && true - 左侧表达式按约定进行
10. 5+81-4 > 10 && true
11. 86-4 > 10 && true
12. 82 > 10 && true
13. true && true
14. true

原创粉丝点击