17.运算符-位运算符
17.1 知识点
位与 &
// 规则: 连接两个数值进行位计算,将数值转为2进制,对位运算,有0则0
int a = 1;// 001
int b = 5;// 101
// 001
//& 101
// 001 = 1
int c = a & b;
Console.WriteLine(c);// 1
a = 3;// 011
b = 19;// 10011
// 00011
//& 10011
// 00011
c = a & b;
Console.WriteLine(c);// 3
// 多个数值进行位运算,没有括号时,从左到右,依次计算
a = 1;// 001
b = 5;// 101
c = 19;//10011
// 00001
//& 00101
// 00001
//& 10011
// 00001
int d = a & b & c;
Console.WriteLine(d);// 1
位或 |
// 规则: 连接两个数值进行位计算,将数值转为2进制,对位运算,有1则1
a = 1;//001
b = 3;//011
c = a | b;
// 001
//| 011
// 011
Console.WriteLine(c);//3
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);//31
异或 ^
// 规则: 连接两个数值进行位计算,将数值转为2进制,对位运算,相同为0,不同为1
a = 1; //001
b = 5; //101
// 001
//^101
// 100
c = a ^ b;
Console.WriteLine(c);//4
a = 10; // 1010
b = 11; // 1011
c = 4; // 100
// 1010
//^ 1011
// 0001
//^ 0100
// 0101 = 5
Console.WriteLine(a ^ b ^ c);//5
位取反 ~
// 规则: 写在数值前面,将数值转为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);//-6
左移和右移 << >>
// 规则: 让一个数的2进制数进行左移和右移
// 左移几位,右侧加几个0
a = 5; // 101
c = a << 5;
// 1位 1010
// 2位 10100
// 3位 101000
// 4位 1010000
// 5位 10100000 = 32 + 128 = 160
Console.WriteLine(c);//160
// 右移几位,右侧去掉几个数
a = 5; // 101
c = a >> 2;
// 1位 10
// 2位 1
Console.WriteLine(c);
17.2 知识点代码
using System;
namespace Lesson14_位运算符
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("位运算符");
//位运算符 主要用数值类型进行计算的
//位运算符是将数值转换为2进制 再进行位运算
#region 知识点一 位与 &
// 规则 连接两个数值进行位计算 将数值转为2进制
// 对位运算 有0则0
int a = 1;// 001
int b = 5;// 101
// 001
//& 101
// 001 = 1
int c = a & b;
Console.WriteLine(c);//1
a = 3;// 011
b = 19;// 10011
// 00011
//& 10011
// 00011
c = a & b;
Console.WriteLine(c);//3
//多个数值进行位运算 没有括号时 从左到右 依次计算
a = 1;// 001
b = 5;// 101
c = 19;//10011
// 00001
//& 00101
// 00001
//& 10011
// 00001
int d = a & b & c;
Console.WriteLine(d);//1
a = 1;//001
b = 2;//010
Console.WriteLine(a & b);//0
#endregion
#region 知识点二 位或 |
// 规则 连接两个数值进行位计算 将数值转为2进制
// 对位运算 有1则1
a = 1;//001
b = 3;//011
c = a | b;
// 001
//| 011
// 011
Console.WriteLine(c);//3
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);//31
#endregion
#region 知识点三 异或 ^
// 规则 连接两个数值进行位计算 将数值转为2进制
// 对位运算 相同为0 不同为1
// 可以巧记 01异性才能生孩子为1 00或11同性不能生孩子为0
a = 1; //001
b = 5; //101
// 001
//^101
// 100
c = a ^ b;
Console.WriteLine(c);//4
a = 10; // 1010
b = 11; // 1011
c = 4; // 100
// 1010
//^ 1011
// 0001
//^ 0100
// 0101 = 5
Console.WriteLine(a ^ b ^ c);//5
#endregion
#region 知识点四 位取反 ~
// 规则 写在数值前面 将数值转为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);//-6
#endregion
#region 知识点五 左移<< 和 右移>>
// 规则 让一个数的2进制数进行左移和右移
// 左移几位 右侧加几个0
a = 5; // 101
c = a << 5;
// 1位 1010
// 2位 10100
// 3位 101000
// 4位 1010000
// 5位 10100000 = 32 + 128 = 160
Console.WriteLine(c);//160
// 右移几位 右侧去掉几个数
a = 5; // 101
c = a >> 2;
// 1位 10
// 2位 1
Console.WriteLine(c);
#endregion
}
}
}
17.3 练习题
35 << 4 和 66 >> 1 的结果为?
// 35 => 100011
// 35 << 4 = 10 0011 0000
// 16 + 32 + 512 = 560
Console.WriteLine(35 << 4); // 560
// 66 => 1000010
// 66 >> 1 = 100001
// 1 + 32 = 33
Console.WriteLine(66 >> 1); // 33
99 ^ 33 和 76 | 85 的结果为?
// 99 ^ 33
// 1100011 ^ 100001
// 1100011
// ^ 0100001
// 1000010
Console.WriteLine(99 ^ 33); // 66
// 76 | 85
// 1001100 | 1010101
// 1001100
// | 1010101
// 1011101 => 64 + 29 = 93
Console.WriteLine(76 | 85); // 93
17.4 练习题代码
using System;
namespace Lesson14_练习题
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("位与算符练习题");
#region 练习题一
//35 << 4 和 66 >> 1 的结果为?
// 35 => 100011
// 35 << 4 = 10 0011 0000
// 16 + 32 + 512 = 560
Console.WriteLine(35 << 4);//560
// 66 => 1000010
// 66 >> 1 = 100001
// 1 + 32 = 33
Console.WriteLine(66 >> 1);//33
#endregion
#region 练习题二
//99 ^ 33 和 76 | 85 的结果为?
// 1100011 ^ 100001
// 1100011
//^0100001
// 1000010
Console.WriteLine(99 ^ 33);//66
// 1001100 | 1010101
// 1001100
//|1010101
// 1011101 => 64 + 29 = 93
Console.WriteLine(76 | 85);//93
#endregion
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com