《了解 &按位与、|按位或、^按位异或、~按位取反、<<按位左移、>>按位右移 的区别》
总结:都是用于二进制运算,在程序中则是将十进制数转换成二进制数后再进行运算,得出二进制结果再转换成十进制数。
【& 按位与(And)】
- 二进制:遇0为0、全1为1;
- 如:十进制 (0 & 0 = 0) = 二进制 (0000 And 0000 = 0000)
- 如:十进制 (1 & 0 = 0) = 二进制 (0001 And 0000 = 0000)
- 如:十进制 (1 & 1 = 1) = 二进制 (0001 And 0001 = 0001)
- 如:十进制 (1 & 2 = 0) = 二进制 (0001 And 0010 = 0000)
- 如:十进制 (1 & 3 = 1) = 二进制 (0001 And 0011 = 0001)
- 在C#中还可用于枚举类型判断;
- 注意:需为枚举成员定义1/2/4/8/16/32/...类型的值,也就是二进制1/10/100/1000/...否则会出现计算错误;
- 效果:左边的集合中存在右边指定的成员时、就返回右边的成员,反之则返回值为0的成员或0;
【| 按位或(Or)】
- 二进制:遇1为1、全0为0;
- 如:十进制 (0 | 0 = 0) = 二进制 (0000 Or 0000 = 0000)
- 如:十进制 (1 | 0 = 1) = 二进制 (0001 Or 0000 = 0001)
- 如:十进制 (1 | 1 = 1) = 二进制 (0001 Or 0001 = 0001)
- 如:十进制 (1 | 2 = 3) = 二进制 (0001 Or 0010 = 0011)
- 如:十进制 (1 | 3 = 3) = 二进制 (0001 Or 0011 = 0011)
- 在C#中还可用在枚举类型中做加法;
【^ 按位异或(Xor)】
- 二进制:相同为0、相异为1;
- 如:十进制 (0 ^ 0 = 0) = 二进制 (0000 Xor 0000 = 0000)
- 如:十进制 (1 ^ 0 = 1) = 二进制 (0001 Xor 0000 = 0001)
- 如:十进制 (1 ^ 1 = 0) = 二进制 (0001 Xor 0001 = 0000)
- 如:十进制 (1 ^ 2 = 3) = 二进制 (0001 Xor 0010 = 0011)
- 如:十进制 (1 ^ 3 = 2) = 二进制 (0001 Xor 0011 = 0010)
【~ 按位取反(Not)】
- 二进制:遇0为1、遇1为0;
- 如:十进制 (~0 = -1) = 二进制 (Not 0000 = ...1111)
- 如:十进制 (~1 = -2) = 二进制 (Not 0001 = ...1110)
- 如:十进制 (~2 = -3) = 二进制 (Not 0010 = ...1101)
- 如:十进制 (~3 = -4) = 二进制 (Not 0011 = ...1100)
【<< 按位左移(Lsh)】
- 二进制左移n位,或在右边加n个0
- 如:(8 << 1) = (1000左移1位则变成1 0000) = (16)
【>> 按位右移(Rsh) 】
- 二进制右移n位,或删除右边n位
- 如:(8 >> 1) = (1000右移1位则变成0100) = (4)
- && 是逻辑与,也就是做条件判断时用的 And;
- || 是逻辑或,也就是做条件判断时用的 Or;
- ! 是逻辑取反,用于程序中的 bool 类型取反值;