using System; namespace Lesson14 { class program { static void Main(string[] args) { //位运算主要使用数值类型计算 //将数值类型转换为二进制形式进行计算 //位运算符包括:& | ^ ~ << >> #region 知识点一 位与 & // 规则 连接两个数值进行位与运算 将数值转为二进制 // 对位运算 有0则0 int a = 1;//001 int b = 5;//101 int c = a & b; // 001 & 101 = 001 Console.WriteLine(c);//001 & 101 = 001 Console.WriteLine(10 & 5);//1010 & 0101 = 0000 Console.WriteLine(3 & 19);//00011 & 10011 = 00011 Console.WriteLine(19 & 3);//10011 & 00011 = 00011 Console.WriteLine(1 & 2);//01 & 10 = 00 //有点像是取最小的数,但不实际是这样 #endregion #region 知识点二 位或 | // 规则 连接两个数值进行位或运算 将数值转为二进制 // 对位运算 有1则1 Console.WriteLine(2 & 3);// 00010 & 00011 = 00011 Console.WriteLine(3 & 2);// 00011 & 00010 = 00011 Console.WriteLine(12 & 3);// 00001100 & 00000011 = 00000000 #endregion #region 知识点三 位异或 ^ // 规则 连接两个数值进行位异或运算 将数值转为二进制 // 对位运算 相同为0 不同为1 Console.WriteLine(2 ^ 3);// 00010 ^ 00011 = 00001 Console.WriteLine(3 ^ 2);// 00011 ^ 00010 = 00001 Console.WriteLine(12 ^ 3);// 00001100 ^ 00000011 = 00001111 #endregion #region 知识点四 位非 ~ // 规则 连接一个数值进行位非运算 将数值转为二进制 // 对位运算 0变1 1变0 Console.WriteLine(~2);// ~00010 = 11101 = -3 // 但是要注意,特定变量类型前面的位会补全例如int int test = 10; Console.WriteLine(~test);// ~00000000000000000000000000001010 = 11111111111111111111111111110101 = -11 #endregion #region 知识点五 左移 << 和 右移 >> // 规则 左移运算符将数值的二进制位向左移动指定的位数,右移运算符将数值的二进制位向右移动指定的位数 // 左移相当于乘以2的n次方 右移相当于除以2的n次方 a = 5;// 101 c = a << 5; // 5左移5位 Console.WriteLine(c);// 10100000 = 160 //右移同理 c = a >> 2; // 5右移2位 Console.WriteLine(c);// 00000101 >> 2 = 00000001 = 1 #endregion } } }