主页
  • 主页
  • 分类
  • 热文
  • 教程
  • 面试
  • 标签
C#

C# 基础

C# 主页
C# 概述
C# 环境
C# 程序结构
C# 基本语法
C# 数据类型
C# 类型转换
C# 变量
C# 常量
C# 运算符
C# 决策结构
C# 循环结构
C# 封装
C# 方法
C# 可空类型
C# 数组
C# 字符串
C# 结构体
C# 枚举
C# 类
C# 继承
C# 多态性
C# 操作符重载
C# 接口
C# 命名空间
C# 预处理
C# 正则表达式
C# 异常
C# 文件与流

C# 高级

C# 属性(Attributes)
C# 反射
C# 属性(Properties)
C# 索引器
C# 委托
C# 事件
C# 集合
C# 泛型
C# 匿名方法
C# 不安全代码
C# 线程

基础

C# 主页
C# 概述
C# 环境
C# 程序结构
C# 基本语法
C# 数据类型
C# 类型转换
C# 变量
C# 常量
C# 运算符
C# 决策结构
C# 循环结构
C# 封装
C# 方法
C# 可空类型
C# 数组
C# 字符串
C# 结构体
C# 枚举
C# 类
C# 继承
C# 多态性
C# 操作符重载
C# 接口
C# 命名空间
C# 预处理
C# 正则表达式
C# 异常
C# 文件与流

高级

C# 属性(Attributes)
C# 反射
C# 属性(Properties)
C# 索引器
C# 委托
C# 事件
C# 集合
C# 泛型
C# 匿名方法
C# 不安全代码
C# 线程

C# 运算符


上一章 下一章

C# 中的运算符

运算符是一种符号,告诉编译器执行特定的数学或逻辑操作。C# 拥有一套丰富的内置运算符,并提供以下类型的运算符:

  1. 算术运算符
  2. 关系运算符
  3. 逻辑运算符
  4. 位运算符
  5. 赋值运算符
  6. 其他运算符

本教程将逐一解释算术、关系、逻辑、位、赋值以及其他运算符。

算术运算符

下表列出了 C# 支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20:

运算符 描述 示例
+ 加两个操作数 A + B = 30
- 第一操作数减去第二操作数 A - B = -10
* 两个操作数相乘 A * B = 200
/ 分子除以分母 B / A = 2
% 取模运算,取整除后的余数 B % A = 0
++ 自增运算符,整数值加一 A++ = 11
-- 自减运算符,整数值减一 A-- = 9

关系运算符

下表列出了 C# 支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20:

运算符 描述 示例
== 检查两个操作数的值是否相等 (A == B) 不成立
!= 检查两个操作数的值是否不相等 (A != B) 成立
> 检查左操作数的值是否大于右操作数 (A > B) 不成立
< 检查左操作数的值是否小于右操作数 (A < B) 成立
>= 检查左操作数的值是否大于等于右操作数 (A >= B) 不成立
<= 检查左操作数的值是否小于等于右操作数 (A <= B) 成立

逻辑运算符

下表列出了 C# 支持的所有逻辑运算符。假设变量 A 持有布尔值 true,变量 B 持有布尔值 false:

运算符 描述 示例
&& 称为逻辑与运算符。如果两个操作数均为非零,则条件为真 (A && B) 为假
     
! 称为逻辑非运算符。反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将其变为假 !(A && B) 为真

位运算符

位运算符在位级别上工作并对位逐个执行操作。以下是 &, |, ^ 的真值表:

p q p & q p q p ^ q
0 0 0 0 0 0
0 1 0 0 1 1
1 1 1 1 1 0
1 0 0 1 0 1

假设 A = 60;且 B = 13;则在二进制格式中如下:

A = 0011 1100
B = 0000 1101

A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011

C# 支持的位运算符如下表所示。假设变量 A 持有 60,变量 B 持有 13:

运算符 描述 示例
& 二进制与运算符,如果两个操作数中都存在该位,则复制该位到结果 (A & B) = 12,即 0000 1100
    二进制或运算符,如果任一操作数中存在该位,则复制该位
^ 二进制异或运算符,如果仅在一个操作数中存在该位,则复制该位 (A ^ B) = 49,即 0011 0001
~ 二进制补运算符,是单目运算符,其效果是对位进行‘翻转’ (~A) = -61,即 1100 0011 在二进制补码中由于是有符号的二进制数
<< 二进制左移运算符。左操作数的值向左移动由右操作数指定的位数 A << 2 = 240,即 1111 0000
>> 二进制右移运算符。左操作数的值向右移动由右操作数指定的位数 A >> 2 = 15,即 0000 1111

赋值运算符

C# 支持的赋值运算符如下:

运算符 描述 示例
= 简单赋值运算符,将右侧操作数的值赋给左侧操作数 C = A + B 将 A + B 的值赋给 C
+= 加入并赋值运算符,它将右操作数加到左操作数,并将结果赋给左操作数 C += A 等同于 C = C + A
-= 减去并赋值运算符,它从左操作数减去右操作数,并将结果赋给左操作数 C -= A 等同于 C = C - A
*= 乘以并赋值运算符,它将右操作数与左操作数相乘,并将结果赋给左操作数 C *= A 等同于 C = C * A
/= 除以并赋值运算符,它将左操作数除以右操作数,并将结果赋给左操作数 C /= A 等同于 C = C / A
%= 取模并赋值运算符,它使用两个操作数取模,并将结果赋给左操作数 C %= A 等同于 C = C % A
<<= 左移并赋值运算符 C <<= 2 等同于 C = C << 2
>>= 右移并赋值运算符 C >>= 2 等同于 C = C >> 2
&= 位与并赋值运算符 C &= 2 等同于 C = C & 2
^= 位异或并赋值运算符 C ^= 2 等同于 C = C ^ 2
  = 位或并赋值运算符

其他运算符

还有一些其他重要的运算符,包括 sizeof, typeof 和 ?:,被 C# 支持:

运算符 描述 示例
sizeof() 返回数据类型的大小 sizeof(int),返回 4
typeof() 返回类的类型 typeof(StreamReader)
& 返回变量的地址 &a 返回变量的实际地址
* 指向一个变量 *a 创建名为 'a' 的指针指向一个变量
?: 条件表达式 如果条件为真?然后值X:否则值Y
is 判断一个对象是否是某种类型 如果(Ford is Car) // 检查 Ford 是否是 Car 类的对象
as 在类型转换失败时不抛出异常的转换 Object obj = new StringReader("Hello"); StringReader r = obj as StringReader;

C# 中的运算符优先级

运算符优先级决定了表达式中的项是如何分组的。这影响了表达式的求值。某些运算符比其他的优先级更高;例如,乘法运算符的优先级高于加法运算符。

例如 x = 7 + 3 * 2;,这里 x 被赋值为 13,而不是 20,因为 * 运算符的优先级高于 +,因此首先计算的是 3*2,然后将 7 加上结果。

在下表中,优先级最高的运算符位于表的顶部,优先级最低的位于底部。在一个表达式中,优先级较高的运算符首先被求值。

类别 运算符 结合性
后缀 () [] -> . ++ -- 从左至右
单目 + - ! ~ ++ -- (类型)* & sizeof 从右至左
乘法 * / % 从左至右
加法 + - 从左至右
移位 << >> 从左至右
关系 < <= > >= 从左至右
等值 == != 从左至右
位与 & 从左至右
位异或 ^ 从左至右
位或    
逻辑与 && 从左至右
逻辑或    
条件 ?: 从右至左
赋值 = += -= *= /= %= >>= <<= &= ^= =
逗号 , 从左至右
上一章 下一章
阅读号二维码

关注阅读号

联系二维码

联系我们

© 2024 Yoagoa. All rights reserved.

粤ICP备18007391号

站点地图