位运算符主要用来数字类型进行计算的。
将数值住换位2进制,在进行位运算。
位与 &
规则:连接两个数值进行位运算,将数值转为2进制。
对位运算,有0则0。
int a = 1;//001
int b = 5;//101
// 001
//& 101
// 001 => 1
int c = a & b;
Console.WriteLine(c);
a = 3;//011
b = 19;//10011
// 00011
//& 10011
// 00011
c = a & b;//3
Console.WriteLine(c);
多个数值进行位运算,没有括号时,从左到右依次计算。
a = 1;//001
b = 5;//101
c = 19;//10011
// 00001
//& 00101
// 00001
//& 10011
// 00001
int d = a & b & c;
//位于规则结果和最小的数一样
Console.WriteLine(d);
a = 1;//001
b = 2;//010
Console.WriteLine(a & b);
位或 |
规则:连接两个数值进行位运算,将数值转为2进制。
对位运算,有1则1。
a = 1;//001
b = 3;//011
c = a | b;
// 001
//| 011
// 011
Console.WriteLine(c);
a = 5;//101
b = 10;//1010
c = 20;//10100
// 00101
// | 01010
// 01111
// | 10100
// 11111 => 1 + 2 + 4 + 8 + 16 = 31
Console.WriteLine(a | b | c);
异或 ^
规则:连接两个数值进行位运算,将数值转为2进制。
相同为0,不同为1。
a = 1;//001
b = 5;//101
// 001
// ^ 101
// 100
Console.WriteLine(a ^ b);
a = 10;//1010
b = 11;//1011
c = 4;//100
// 1010
// ^ 1011
// 0001
// ^ 0100
// 0101 = 5
Console.WriteLine(a ^ b ^ c);
位取反 ~
规则:连接两个数值进行位运算,将数值转为2进制。
对位运算,0变1,1变0
a = 5;
// 0000 0000 0000 0000 0000 0000 0000 0101
// 1111 1111 1111 1111 1111 1111 1111 1010
// 反码补码知识
c = ~a;
Console.WriteLine(c);
左移<< 和 右移>>
规则:让一个数的2进制数进行左移和右移。
左移几位,右侧加几个0。
a = 5; // 101
c = a << 5;
// 1位 1010
// 2位 10100
// 3位 101000
// 4位 1010000
// 5位 10100000 = 32 + 128 = 160
Console.WriteLine(c);
// 右移几位 右侧去掉几个数
a = 5; // 101
c = a >> 2;
// 1位 10
// 2位 1
Console.WriteLine(c);