【C#学习】运算符
来源:互联网 发布:在家里赚钱 知乎 编辑:程序博客网 时间:2024/06/06 00:14
C# 提供了许多运算符,这些运算符是指定要在表达式中执行哪些操作(数学、索引、函数调用等等)的符号。 可以重载许多应用于用户定义类型的运算符,从而更改其含义。
对整数类型执行的运算(如 ==
、!=
、<
、>
、&
、|
)通常也可对枚举 (enum
) 类型执行。
以下章节按最高优先级到最低优先级的顺序列示 C# 运算符。 各章节内运算符的优先级相同。
主要运算符
以下是具有最高优先级的运算符。 请注意,你可以单击运算符转到包含示例的详细页面。
x.y:成员访问。
x?.y:null 条件成员访问。 如果左操作数为 null
,则返回 null
。
x?[y]:null 条件索引访问。 如果左操作数为 null
,则返回 null
。
f(x):函数调用。
a[x]:聚合对象索引。
x++:后缀递增。 先返回 x 值,然后用加 1(通常加整数 1)后的 x 值更新存储位置。
x--:后缀递减。 先返回 x 值,然后用减 1(通常减整数 1)后的 x 值更新存储位置。
new:类型实例化。
typeof:返回表示操作数的 System.Type 对象。
checked:对整数运算启用溢出检查。
unchecked:对整数运算禁用溢出检查。 这是默认的编译器行为。
default(T):返回类型 T 的默认初始值,引用类型的默认初始值为 null
,数值类型的默认初始值为 0,结构类型成员的默认初始填充值为 0/null
。
delegate:声明并返回委托实例。
sizeof:返回类型操作数的大小(以字节为单位)。
->:指针取消引用与成员访问相结合。
一元运算符
这些运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击运算符转到包含示例的详细页面。
+x:返回 x 的值。
-x:数值取反。
!x:逻辑取反。
~x:按位求补。
++x:前缀递增。 先用加 1(通常加整数 1)后的 x 值更新存储位置,然后返回 x 值。
--x:前缀递减。 先用减 1(通常减整数 1)后的 x 值更新存储位置,然后返回 x 值。
(T)x:类型显式转换。
await:等待 Task
。
&x:地址。
*x:取消引用。
乘法运算符
这些运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击运算符转到包含示例的详细页面。
x * y:乘法。
x / y:除法。 如果操作数均为整数,则结果为整数,舍去小数(例如,-7 / 2 is -3
)。
x % y:取模。 如果操作数均为整数,则返回 x 除以 y 后的余数。 如果 q = x / y
且 r = x % y
,则 x = q * y + r
。
相加运算符
这些运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击运算符转到包含示例的详细页面。
x + y:加法。
x:y:减法。
移位运算符
这些运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击运算符转到包含示例的详细页面。
x << y:左移位,右侧用 0 填充。
x >> y:右移位。 如果左操作数是 int
或 long
,则左位数补符号位。 如果左操作数是 uint
或 ulong
,则左位数补零。
关系和类型测试运算符
这些运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击运算符转到包含示例的详细页面。
x < y:小于(如果 x 小于 y,则为 true)。
x > y:大于(如果 x 大于 y,则为 true)。
x <= y:小于或等于。
x >= y:大于或等于。
is:类型兼容性。 如果求值后的左操作数可以转换为右操作数中指定的类型(静态类型),则返回 true。
as:类型转换。 返回左操作数并转换为右操作数中指定的类型(静态类型),但 as
返回 null
,其中 (T)x
会引发异常。
相等运算符
这些运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击运算符转到包含示例的详细页面。
x == y:相等。 默认情况下,对于 string
以外的引用类型,此运算符返回引用相等(标识测试)。 但是,类型可以重载 ==
,因此,如果你想测试标识,最好对 object
使用 ReferenceEquals
方法。
x != y:不相等。 请参阅有关 ==
的注释。 如果某个类型重载 ==
,则它必须重载 !=
。
逻辑 AND 运算符
此运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击该运算符转到包含示例的详细页面。
x & y:逻辑或位 AND。 与整数类型一起使用,并且通常允许 enum
类型。
逻辑 XOR 运算符
此运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击该运算符转到包含示例的详细页面。
x ^ y:逻辑或位 XOR。 通常可以将此运算符与整数类型和 enum
类型一起使用。
逻辑 OR 运算符
此运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击该运算符转到包含示例的详细页面。
x | y:逻辑或位 OR。 与整数类型一起使用,并且通常允许 enum
类型。
条件 AND 运算符
此运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击该运算符转到包含示例的详细页面。
x && y:逻辑 AND。 如果第一个操作数为 false,则 C# 不对第二个操作数求值。
条件 OR 运算符
此运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击该运算符转到包含示例的详细页面。
x || y:逻辑 OR。 如果第一个操作数为 true,则 C# 不对第二个操作数求值。
Null 合并运算符
此运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击该运算符转到包含示例的详细页面。
x ?? y:如果不为 null
,则返回 x
;否则返回 y
。
条件运算符
此运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击该运算符转到包含示例的详细页面。
t ? x : y:如果测试 t
为 true,则计算并返回 x
;否则,计算并返回 y
。
赋值和 Lambda 运算符
这些运算符的优先级比下一章节高,比上一章节低。 请注意,你可以单击运算符转到包含示例的详细页面。
x = y:赋值。
x += y:递增。 x
值加 y
值,结果存储在 x
中,并返回新值。 如果 x
指定 event
,则 y
必须是 C# 作为事件处理程序添加的相应函数。
x -= y:递减。 x
值减 y
值,结果存储在 x
中,并返回新值。 如果 x
指定 event
,则 y
必须是 C# 作为事件处理程序删除的相应函数
x *= y:乘法赋值。 x
值乘以 y
值,结果存储在 x
中,并返回新值。
x /= y:除法赋值。 x
值除以 y
值,结果存储在 x
中,并返回新值。
x %= y:取模赋值。 x
值除以 y
值,余数存储在 x
中,并返回新值。
x &= y:AND 赋值。 y
值和 x
值相与,结果存储在 x
中,并返回新值。
x |= y:OR 赋值。 y
值和 x
值相或,结果存储在 x
中,并返回新值。
x ^= y:XOR 赋值。 y
值和 x
值相异或,结果存储在 x
中,并返回新值。
x <<= y:左移赋值。 将 x
值向左移动 y
位,结果存储在 x
中,并返回新值。
x >>= y:右移赋值。 将 x
值向右移动 y
位,结果存储在 x
中,并返回新值。
=>:lambda 声明。
算术溢出
算术运算符(+、-、*、/)的计算结果可能会超出所涉数值类型的可取值范围。 详细信息应参考特定运算符的相关章节,而一般情况下:
整数算术溢出或者引发 OverflowException,或者放弃结果的最高有效位。 整数被零除总是引发 @System.DivideByZeroException。
发生整数溢出时,具体影响视执行上下文而定,上下文可为 checked 或 unchecked。 在 checked 上下文中引发 OverflowException。 在 unchecked 上下文中,放弃结果的最高有效位并继续执行。 因此,C# 让你有机会选择处理或忽略溢出。 默认情况下,算术运算发生在 unchecked 上下文中。
除算术运算以外,整型类型之间的显式转换也会导致溢出(例如,将 long 显式转换成 int),并受到 checked 或 unchecked 执行的约束。 但是,位运算符和移位运算符永远不会导致溢出。
浮点算术溢出或被零除从不引发异常,因为浮点类型基于 IEEE 754,因此可以表示无穷大和 NaN(非数值)。
小数算术溢出总是引发 OverflowException。 小数被零除总是引发 DivideByZeroException。
- 【C#学习】运算符
- C#学习:运算符重载
- 【C#学习】运算符重载
- c#学习笔记(七)运算符重载
- c# 学习总结 之 运算符
- C#运算符重载学习总结
- c#学习之双冒泡运算符
- C#之运算符重载学习案例
- c#学习 3/22 关系运算符
- C#基础学习——运算符
- c# 关键字,运算符,表达式 -学习笔记
- C#学习笔记 5 运算符
- C#学习笔记——运算符
- 学习C#之变量和运算符
- C#学习笔记(九):运算符重载
- C#源码学习之---运算符的重载
- C#入门经典学习3-类型运算符
- 学习笔记——C#中特殊的运算符
- 六种三栏式布局
- css sprite新手教程
- [翻译]How to Interpret the Erlang Crash Dumps
- 使用Java文件选择器去获取文件、图片
- Apache POI Excel固定(冻结)单元格
- 【C#学习】运算符
- 简单五子棋
- Java中的自动转型
- 如何利用Cloudera Manager来手动安装parcel包
- Oracle 11g 创建数据库详细步骤
- URL编码
- pynlpir(ICTCLAS)初步使用
- MapReduce计算模型的深入剖析
- Android中通过代码修改bitmap的宽高.