C# 位运算及实例计算


C# 位运算及实例计算

前言

平时在实际工作中很少用到这个,虽然都是一些比较基础的东西,但一旦遇到了,又不知所云。刚好最近接触了一些相关这方面的项目,所以也算是对 这些内容重新温习实践了一遍。所以这篇不仅作为个人备忘,也分享给各位重温一遍。

要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作。

了解:

在C#中可以对整型运算对象按位进行逻辑运算。按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位

运算符号 意义 运算对象类型 运算结果类型 对象数 实例
~ 位逻辑运算 整型,字符型 整型 1 ~a
& 位逻辑运算 2 a & b
| 位逻辑运算 2 a | b
^ 位逻辑异或运算 2 a ^ b
<< 左移运算 2 a<<4
>> 右移运算 2 a>>2

开始

一、位逻辑非运算

位逻辑非运算是单目的,只有一个运算对象。位逻辑非运算按位对运算对象的值进行非运算。符号为:~

即:如果某一位等于0,就将其转变为1;如果某一位等于1,就将其转变为0

对二进制的10010001进行位逻辑非运算,结果等于01101110

用十进制:~145等于110

二、位逻辑与运算

位逻辑与运算将两个运算对象按位进行与运算。符号为&。

运算规则为:1&1=1;0&1=0;0&0=0

            #region 位运算与运算
            int a = 11; //11的二进制是0000 1011
            int b = 13; //13的二进制是0000 1101
            Console.WriteLine(a & b);  //11 & 13的结果就是0000 1001 即结果是9
            Console.Read();

            #endregion

img

三、位逻辑或运算

位逻辑或运算将两个运算对象按位进行或运算。符号为 |

运算规则为:1|1=1;1|0=1;0|0=0

            #region 位运算或运算
            int a = 11; //11的二进制是0000 1011
            int b = 13; //13的二进制是0000 1101
            Console.WriteLine(a | b);  //11 | 13的结果就是0000 1111 即结果是15
            Console.Read();
            #endregion

四、位逻辑异或运算

位逻辑异或运算将两个运算对象按位进行异或运算。符号为^

运算规则:1^1=0;1^0=1;0^0=0 (相同得0,相异得1)

            #region 位运算异或运算
            int a = 11; //11的二进制是0000 1011
            int b = 13; //13的二进制是0000 1101
            Console.WriteLine(a ^ b);  //11 ^ 13的结果就是0000 0110 即结果是6
            Console.Read();
            #endregion

五、位左移运算

位左移运算将整个数按位左移若干位,左移后空出的部分0。符号为:<<

运算规则:a<<1 =a乘以2的1次方;a<<2 =a乘以2的2次方;a<<3 =a乘以2的3次方

            #region 位左移运算
            int a = 11; //11的二进制是0000 1011
            Console.WriteLine(a << 2);  //0000 1011 左位移2位的结果就是0010 1100 即结果是44 (11*2^2=44)
            Console.Read();
            #endregion

img

六、位右移运算

位右移运算将整个数按位右移若干位,右移后空出的部分填0。符号为:>>

运算规则:a>>1 = a整除2的1次方;**a>>2 = a整除2的2次方;**a>>3 = a整除2的3次方

            #region 位右移运算
            int a = 11; //11的二进制是0000 1011
            Console.WriteLine(a >> 2);  //0000 1011 右位移2位的结果就是0000 0010 即结果是2 (11÷(2^2)=2)
            Console.Read();
            #endregion

img

总结

  1. 位运算,虽然平时很少用到位运算符,但是在某些时候,这些确实能够给我们提供很好的解决方案。

  2. 在实际应用中,不断的重温基础的知识,加强巩固。毕竟很多时候,只有将基础的知识打牢固,后续才能更好的功能拓展和衍生


文章作者: 艾三元
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 艾三元 !
 上一篇
由门禁系统引起的升级改造 由门禁系统引起的升级改造
由门禁系统引起的升级改造前言 前阵子,公司大门口的指纹识别终端机器开始闹情绪了,经常出现识别不了,指纹识别速度有时快,有时慢,识别率忽高忽低,经常出现偏差错误, 最终导致指纹系统出现错乱的情况,可想而知,你连门都进不了,这班还怎么上呢?特别
2019-07-27
下一篇 
【干货分享】C# 实体类生成工具 【干货分享】C# 实体类生成工具
【干货分享】C# 实体类生成工具前言 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类。放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码。所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形成工程,方
2019-06-22
  目录