关于逻辑运算符的通俗理解
现在基本不跟硬件通讯,软件开发很少有人去理解这些逻辑运算符了,经常会用到一些逻辑运算符,今天整理下,通俗的理解一下各运算符是怎么情况.
先放一下测试代码,这个代码本身没有什么意义,主要是对结果的说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | class Program { static void Main( string [] args) { int a = 123, b = 0; int result; #region 1.逻辑 非(~) 运算 a = 123; result = ( byte )~a; Console.WriteLine( "{0} 非(~) 的运算" , a); PrintResult(result, a, b); #endregion #region 2.逻辑 与(&) 运算 b = 12; result = a & b; Console.WriteLine( "{0} 与(&) {1} 的运算" , a, b); PrintResult(result, a, b); #endregion #region 3.逻辑 或(|) 运算 result = a & b; Console.WriteLine( "{0} 或(|) {1} 的运算" , a, b); PrintResult(result, a, b); #endregion #region 3.逻辑 异或(^) 运算 result = a ^ b; Console.WriteLine( "{0} 异或(^) {1} 的运算" , a, b); PrintResult(result, a, b); #endregion #region 4.左位移(<<) 运算 a = 5; b = 4; result = ( byte )(a << b); Console.WriteLine( "{0} 左移位( << ) {1}" , a, b); Console.WriteLine( "运算结果:\t{0}" , result); Console.WriteLine( "{0}的2进制值为:\t{1}" , a, FormatBase2(a)); Console.WriteLine( "{0}的2进制值为:\t{1}" , result, FormatBase2(result)); #endregion #region 5.右位移(>>) 运算 a = 5; b = 1; result = ( byte )(a >> b); Console.WriteLine( "{0} 右移位( >> ) {1}" , a, b); Console.WriteLine( "运算结果:\t{0}" , result); Console.WriteLine( "{0}的2进制值为:\t{1}" , a, FormatBase2(a)); Console.WriteLine( "{0}的2进制值为:\t{1}" , result, FormatBase2(result)); #endregion Console.ReadKey(); } static void PrintResult( int result, int a, int b) { Console.WriteLine( "运算结果:\t{0}" , result); Console.WriteLine( "{0}的2进制值为:\t{1}" , a, FormatBase2(a)); if (b > 0) { Console.WriteLine( "{0}的2进制值为:\t{1}" , b, FormatBase2(b)); } Console.WriteLine( "{0}的2进制值为:\t{1}" , result, FormatBase2(result)); Console.WriteLine(); } static string FormatBase2( int num) { string r = Convert.ToString(num, 2); while (r.Length < 8) { r = "0" + r; } return r; } } |
说明一下,关于位的逻辑运算,比如常说的 :1个8位字节,可以理解成8位是一个字节,通常用于硬件的一些权限设置,比如: 11111111,一个字节就可以控制8个权限,确实很省啊.
以下的例子都与这个2进制相关,看到2进制的结果就会明白,原来这些符号的起名是那么直观.
先普及一下计算机基础知识,计算机是只认识0和1; ,我们叫,真和假,或者专业点叫 true和false
1. 非运算 c#运算符号:~ ,windows计算器运算符号: Not
123 非(~) 的运算
运算结果: 132
123的2进制值为: 01111011
132的2进制值为: 10000100
根据上面的结果,清楚的看到,原来"非"的运算,是那么简单,
通俗的讲就是:如果是真(1)的,那么就是假(0),如果是假的(0)那么就是真的(1)
2. 与 运算 c#符号:&,计算器符号:And
123 与(&) 12 的运算
运算结果: 8
123的2进制值为: 01111011
12的2进制值为: 00001100
8的2进制值为: 00001000
根据2进制结果来看,
通俗的将:如果 都是"真的(1)"那么才是"真的"否则就是"假的(0)".
3.逻辑 或(|) 运算 ,计算器符号:Or
123 或(|) 12 的运算
运算结果: 127
123的2进制值为: 01111011
12的2进制值为: 00001100
127的2进制值为: 01111111
通俗解释:如果有一个真的,那么就是真的(1),否则就是假的(0);
4.逻辑 异或(^) 运算 ,计算器符号:Xor
123 异或(^) 12 的运算
运算结果: 119
123的2进制值为: 01111011
12的2进制值为: 00001100
119的2进制值为: 01110111
关于异或的说明,测试参数做了些改动,为了把异或的3种可能都呈现出来.
异或的概念是:相同的为假(0),不同的为真(1); 这个好像这么解释就行了.
5.左位移(<<) 运算 计算器符号:Lsh
5 左移位(<<) 4
运算结果: 80
5的2进制值为: 00000101
80的2进制值为: 01010000
一句话:往右边补4个零
6.右位移(>>) 运算 计算器符号:Rsh
5 右移位( >> ) 1
运算结果: 2
5的2进制值为: 00000101
2的2进制值为: 00000010
解释:往左边补4个零
其实看到这些结果,几乎不用解释了,他都是按"位"进行计算的,转换为2进制就非常直观了.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤