会当凌绝顶,一览众山小。 ——杜甫《望岳》
逻辑运算符
逻辑运算符用于对布尔值进行逻辑运算,并且也会返回一个布尔值。逻辑运算符主要有如下四种
逻辑与 &&
- 当且仅当两个操作数都为
true 时,结果才会返回 true,其余情况均会返回 false
1 2 3 4
| byte x = 20; byte y = 12; Console.WriteLine(x<y && x>y); Console.WriteLine(x>y && x!=y);
|
逻辑或 ||
- 只要两个操作数中有一个为
true,结果就会返回 true;只有当两者均为 false 时,结果才会返回 false
1 2 3 4
| bool result_1 = 20!=10 || 20<10; bool result_2 = 20<3 || 20==4; Console.WriteLine(result_1); Console.WriteLine(result_2);
|
逻辑非 !
1 2 3
| int x=30,y=13; Console.WriteLine(!(x!=y || x<y)); Console.WriteLine(!(x==y && x>y));
|
逻辑异或 ^
- 当两个操作数的布尔值不同时,结果返回
true,否则返回 false
1 2 3
| bool a=true,b=false,c=true; Console.WriteLine(a ^ b); Console.WriteLine(a ^ c);
|
位运算符
在 C# 中,位运算符直接对整型的二进制位进行操作,并逐位运算。如下是 C# 当中的一些位运算符:
按位与 &
- 对两个操作数的二进制形式的每一位进行判断,只有当两个对应位都为1时,结果才会在这一位上标记为1,其余情况均为0。操作完成后该运算符会返回一个十进制数,这个数的二进制形式上为1的位就代表两个操作数的二进制形式在这一位上都为1,反之亦然
1 2 3
| int a = 87; int b = 89; int result = a & b;
|
按位或 |
- 类似于
& 运算符,不过 | 运算符会对对应的二进制位进行或运算,即只要两个对应位中有一个为1,结果就会在这一位上标记为1,否则为0
1 2 3
| int x = 23; int y = 34; int result = x | y;
|
按位异或 ^
- 类似地,
^ 运算符会对对应的二进制位进行异或运算,即当两个对应位不同时,结果就会在这一位上标记为1,否则为0
1 2 3
| byte a = 12; byte b = 9; byte result = a ^ b;
|
按位取反 ~
- ~ 运算符是一元运算符,用于对操作数的每个二进制位取反 (1变0,0变1)
- 因为 C# 中整型的最高位是符号位,所以取反后结果可能为负数
1 2
| int a = 5; int result = ~a;
|
左移 <<
- 将第一个操作数的二进制位向左移动指定的位数(第二个操作数指定移动位数),右侧空出的位补0
- 在不溢出的情况下,
a << n 等价于 a * (2^n)
1 2
| int a = 5; int result = a << 2;
|
右移 >>
- 将第一个操作数的二进制位向右移动指定的位数(第二个操作数指定移动位数)
- 对于无符号整数,左侧空出的位一律补0
- 对于负整数,该运算符会先将其转化为补码的形式,再进行右移操作,左侧空位一律补1,最后将补码转化为十进制数并返回
1 2 3 4 5
| int a = 20; int result_1 = a >> 2;
sbyte b = -12; int result_2 = b >> 2;
|