前言:

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

要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即: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的二进制是0000 1011
int b = ; //13的二进制是0000 1101
Console.WriteLine(a & b); //11 & 13的结果就是0000 1001 即结果是9
Console.Read(); #endregion

三、位逻辑或运算

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

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

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

六、位右移运算

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

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

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

总结:

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

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

C# 位运算及实例计算的更多相关文章

  1. Java位运算经典实例

    一 源码.反码.补码 正数的源码.反码.补码相同,例如5:            5的源码:101            5的反码:101            5的补码:101 负数的源码.反码.补 ...

  2. C语言位运算+实例讲解(转)

    按位或 按位与 按位异或 按位取反 左移右移 C语言位运算 有6种: &, | , ^(亦或), >(右移). 注意:参与位运算的元素必须是int型或者char型,以补码形式出现. 按位 ...

  3. PCB SQL SERVER 位运算应用实例

    在PCB行业,一个产品可能同时在多个工厂生产,举例:一个产品一条主记录,这条记录中会对应多个工厂的产地,而这个工厂产地个数不确定, 那么如何设计表结构存储这个不确定的工厂呢?这里想到了4个方式存储 一 ...

  4. LeetCode - 231. Power of Two - 判断一个数是否2的n次幂 - 位运算应用实例 - ( C++ )

    1.题目:原题链接 Given an integer, write a function to determine if it is a power of two. 给定一个整数,判断该整数是否是2的 ...

  5. 【Assembly】-NO.88.Assembly.2.滴水逆向.1.002-【位运算及基础指令】-

    1.0.0 Summary Tittle:[Assembly]-NO.88.Assembly.2.滴水逆向.1.002-[]- Style:Java Series:Log4j Since:2018-0 ...

  6. 我们必须要了解的Java位运算(不仅限于Java)

    本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...

  7. c#位运算基本概念与计算过程

    前言 一些非常基础的东西,在实际工作中没有用到.很少用到.一旦遇到,又不知所云.最近遇到一个问题,把一个int16(short) .两个bool变量整合成一个int32(int),当听到这个要求时,我 ...

  8. 利用位运算进行a+b的计算(Java&&Python)

    题目链接 需要用到的位运算操作:异或(^).与(&).右移(<<) 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果 与运算:找出来a和b ...

  9. ACM位运算技巧

    ACM位运算技巧 位运算应用口位运算应用口诀位运算应用口诀 清零取反要用与,某位置一可用或 若要取反和交换,轻轻松松用异或 移位运算 要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形. ...

随机推荐

  1. 百度地图 Android SDK - 新的版本号(v3.2.0)正式上线

    百度地图 Android SDK v3.2.0 在版本号 2014 年 11 月 07 日本正式推出工作完成! watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQ ...

  2. otrs离线部署

    OTRS5离线部署 参考地址:https://doc.otrs.org.cn/doc/manual/admin/stable/zh_CN/html/manual-installation-of-otr ...

  3. CentOS 6安装桌面

    安装图形界面 yum -y groupinstall "X Window System" "Chinese Support" "Desktop&quo ...

  4. QT Linux Demo程序编译

    我手上的qt源码包为:qt-everywhere-opensource-src-4.7.0.tar.gz 在Linux下编译比较容易,解压后直接 ./configure,一般会报缺少什么库这些.自己遇 ...

  5. wpf屏蔽快捷键alt+space,alt+F4

    /// <summary>        /// 阻止 alt+f4和alt+space 按键        /// </summary>        /// <par ...

  6. 图像滤镜艺术---挤压(Pinch)滤镜

    原文:图像滤镜艺术---挤压(Pinch)滤镜 Pinch滤镜 Pinch滤镜是通过坐标变换来实现以某个点(cenX,cenY)为中心,某个半径R内图像向其挤压变形的效果.实现这个滤镜的算法很多,主要 ...

  7. vs2017 cordova调试ios app

    https://docs.microsoft.com/en-us/visualstudio/cross-platform/tools-for-cordova/first-steps/ios-guide ...

  8. List遍历删除 或取指定的前N项

    class Program { static void Main(string[] args) { /* * List遍历删除 或取指定的前N项 */ List<PerSon> listP ...

  9. UWP入门(四)--设置控件样式

    原文:UWP入门(四)--设置控件样式 官方定义:可以使用 XAML 框架通过多种方式自定义应用的外观. 通过样式可以设置控件属性,并重复使用这些设置,以便保持多个控件具有一致的外观. 可分享至不同e ...

  10. MySql如何将一个表字段更新到另一个表字段

    今天遇到这样一个需求: 有两张表,一张是专辑表,另一张是专辑下的图片表, 专辑表中有拍摄年\月,两个字段; 图片表中有实际拍摄日期的字段; 因为专辑表中这两个字段是后加入的,因此只能用一条sql语句将 ...