运算符是一种告诉编译器执行特定行为的数学或逻辑操作的符号。C# 内置了许多类型的运算符,用于对这些类型的值执行一些基本的操作。这些运算符包括:算术运算符、比较运算符、布尔逻辑运算符、位运算符和相等运算符。
一、算术运算符
++ 增量运算符
-- 减量运算符
+ 一元加运算符
- 一元减运算符
示例:
int a = 10; int b = 10; // 后缀增量运算符 Console.WriteLine(a++); // 输出 10 Console.WriteLine(a); // 输出 11 // 前缀增量运算符 Console.WriteLine(++b); // 输出 11 int c = 10; int d = 10; // 后缀减量运算符 Console.WriteLine(c--); // 输出 10 Console.WriteLine(c); // 输出 9 // 前缀减量运算符 Console.WriteLine(--d); // 输出 9
二元运算符
+ 加法运算符 变形 +=
- 减法运算符 变形 -=
* 乘法运算符 变形 *=
/ 除法运算符 变形 /=
% 余数运算符 变形 %=
二、布尔逻辑运算符
其中假设变量 a 为 true,变量 b 为 false:
! 逻辑非运算符 !a 为 False
& 逻辑与运算符 a & b 为 False
| 逻辑或运算符 a | b 为 True
^ 逻辑异或运算符 a ^ b 为 True
&& 条件逻辑与运算符 a && b 为 False
|| 条件逻辑或运算符 a || b 为 True
三、位运算符
假设变量 a 为 1,变量 b 为 2:
~ 按位求补运算符 ~a 等于 -2
<< 左移位运算符 a << 2 等于 4
>> 右移位运算符 a >> 2 等于 0
>>> 无符号右移运算符 a >>> 2 等于 0
& 逻辑与运算符 a & b 等于 0
^ 逻辑异或运算符 a ^ b 等于 3
| 逻辑或运算符 a | b 等于 3
示例如下:
uint a = 0b_0000_1111_0000_1111_0000_1111_0000_1100; uint b = ~a; Console.WriteLine(Convert.ToString(b, toBase: 2)); // 输出: 11110000111100001111000011110011 uint x = 0b_1100_1001_0000_0000_0000_0000_0001_0001; Console.WriteLine($"之前: {Convert.ToString(x, toBase: 2)}"); uint y = x << 4; Console.WriteLine($"之后: {Convert.ToString(y, toBase: 2)}"); // 输出: // 之前: 11001001000000000000000000010001 // 之后: 10010000000000000000000100010000 uint c = 0b_1000_0000_0000_0000_0000_0000_0000_0000; Console.WriteLine($"之前: {Convert.ToString(c, toBase: 2),32}"); uint d = c >> 3; Console.WriteLine($"之后: {Convert.ToString(d, toBase: 2).PadLeft(32, '0'),32}"); // 输出: // 之前: 10000000000000000000000000000000 // 之后: 00010000000000000000000000000000 // 运算符 >> 和运算符 >>> 的区别: int x = -8; Console.WriteLine($"之前: {x,11}, 十六进制: {x,8:x}, 二进制:{Convert.ToString(x, toBase: 2),32}"); int y = x >> 2; Console.WriteLine($"之后 >>: {y,11}, 十六进制: {y,8:x}, 二进制:{Convert.ToString(y, toBase: 2),32}"); int z = x >>> 2; Console.WriteLine($"之后 >>>: {z,11}, 十六进制: {z,8:x}, 二进制:{Convert.ToString(z, toBase: 2).PadLeft(32, '0'),32}"); // 输出: // 之前: -8, 十六进制: fffffff8, 二进制: 11111111111111111111111111111000 // 之后 >>: -2, 十六进制: fffffffe, 二进制: 11111111111111111111111111111110 // 之后 >>>: 1073741822, 十六进制: 3ffffffe, 二进制: 00111111111111111111111111111110
四、关系运算符
假设变量 a 为 1,变量 b 为 2
== 相等运算符 (a == b) 等于 False
!= 不等运算符 (a != b)等于 True
< 小于运算符 (a < b)等于 True
> 大于运算符 (a > b)等于 False
<= 小于或等于运算符 (a <= b)等于 True
>= 大于或等于运算符 (a >= b)等于 False
五、赋值变量符
假设有变量 a 与 b
= 赋值运算符 a = b 等同于 b 赋值给 a
+= 加且赋值运算符 a += b 等同于 a = a + b
-= 减且赋值运算符 a -= b 等同于 a = a - b
*= 乘且赋值运算符 a *= b 等同于 a = a * b
/= 除且赋值运算符 a /= b 等同于 a = a / b
%= 求模且赋值运算符 a %= b 等同于 a = a % b
<<= 左移且赋值运算符 a <<= 2 等同于 a = a << 2
>>= 右移且赋值运算符 a >>= 2 等同于 a = a >> 2
&= 按位与且赋值运算符 a &= b 等同于 a = a & b
^= 按位异或且赋值运算符 a ^= b 等同于 a = a ^ b
|= 按位或且赋值运算符 a |= b 等同于 a = a | b
六、其他运算符
假设变量 int? a = 10、int[] arr = {1}:
sizeof() sizeof 运算符 sizeof(int) 返回 4
typeof() typeof 运算符 typeof(StreamReader) 返回 System.IO.StreamReader
is is 运算符 (a is int) 返回 True
as as 运算符 (a as double?) 返回 null
? : 三元条件运算符 (true ? a : 0) 返回 10
??/??= Null 合并操作符 (a ?? 0) 返回 10
?. /?[] Null 条件运算符 arr?[0] 返回 1