C#之位运算

符号:<< >> & | ^ ~

作用:用于二进制数据的操作

表达式: 表达式 + 运算符 + 表达式

~表达式或者是变量

优先级:~高于<< , >> 高于 & 高于 | ^

结合性:左结合

说明:

char a = 10

10 << 2 -- 0000 1010 -- 0010 1000

<<: 按位进行左移,把每个位都左移两个位置,在低位补0

左移几位就是乘2的几次方

10 >> 2 -- 0000 1010 -- 0000 0010

>> :无符号右移:按位进行右移,把每个位都右移两个位置,在高位补0

有符号右移:按位进行右移,把每个位都右移两个位置,在高位补符号位

右移几位就是除2的几次方

&:每个位都进行与,有0出0,全1出1

1000 1111

& 0100 0110

0000 0110

|:每个位都进行或,有1出1,全0出0

1000 1111

| 0100 0110

1100 1111

^:每个位都进行或,相同出0,不同出1

1000 1111

^ 0100 0110

1100 1001

~: 每个位都进行取反

1000 1111

~ 0111 0000

// 比如现在有一个32位的数据,你想要把第8位变为1,怎么做?

原始值:xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

| 0x1 << 8

0000 0000 0000 0000 0000 0001 0000 0000

目标值:xxxx xxxx xxxx xxxx xxxx xxx1 xxxx xxxx

在没改变其他值的情况下,让第8位一定是1

//比如现在有一个32位的数据,你想要把第7和8位变为10,怎么做?

原始值:xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

0x3 << 7

~ 0000 0000 0000 0000 0000 0001 1000 0000

& 1111 1111 1111 1111 1111 1110 0111 1111

xxxx xxxx xxxx xxxx xxxx xxx0 0xxx xxxx

0x2 << 7

| 0000 0000 0000 0000 0000 0001 0000 0000

目标值:xxxx xxxx xxxx xxxx xxxx xxx1 0xxx xxxx

//比如现在有一个32位的数据,你想知道32位的数据里第25位是0还是1,怎么做?

原始值:xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

0x1 << 25

0000 0010 0000 0000 0000 0000 0000 0000

&

0000 00x0 0000 0000 0000 0000 0000 0000

下表列出了 C# 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

|------|------------------------------------------------------------------------------|-----------------------------------------------|
| 运算符 | 描述 | 实例 |
| & | (位与)有0出0,全1出1 | (A&B)将得到12,即为0000 1100 |
| | | (位或)有1出1,全0出0 | (A|B)将得到61,即为0011 1101 |
| ^ | (位异或)相同出0,不同出1 | (A^B)将得到49,即为0011 0001 |
| ~ | (位取反)每个位都进行取反 | (~A)将得到-61,即为1100 0011一个有符号二进制数的补码形式 |
| << | 按位进行左移,把每个位都左移两个位置,在低位补0 左移几位就是乘2的几次方 | A<<2将得到240,即为1111 0000 |
| >> | 无符号右移:按位进行右移,把每个位都右移两个位置,在高位补0 有符号右移:按位进行右移,把每个位都右移两个位置,在高位补符号位 右移几位就是除2的几次方 | A>>2将得到15,即为0000 1111,B>>2将得到3即为0000 0011 |

cs 复制代码
namespace Demo位运算
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //int a = 4;
            //int c= a << 3;
            //Console.WriteLine(c);

            int a = 16;
            int b = a >> 4;
            Console.WriteLine(b);
        }
    }
}
相关推荐
海天鹰30 分钟前
C#:接收从打开方式打开的参数
c#
宝桥南山1 小时前
.NET 11 - 尝试一下Minimal API中的异步验证新特性
microsoft·微软·c#·asp.net·.net·.netcore
开开心心_Every1 小时前
文件查重软件批量删除重复文件释放空间
java·开发语言·c#·计算机外设·ocr·excel·perl
波力海苔夹心脆6752 小时前
VisionPro 与 VisionMaster 对比(上):软件定位、开发环境与核心视觉工具对照
图像处理·算法·计算机视觉·c#·视觉检测·个人开发·vp9
疯狂戴夫冒险3 小时前
歇一会 · 久坐休息提醒工具(番茄钟)工具分享
c#
...6224 小时前
VisionMaster 测量模块工具
c#·visionmaster
samble21 小时前
从零搭建灌装监控系统(十九):单元测试实战,xUnit + 内存SQLite + 反射测试私有方法
c#·wpf·mvvm·modbus·工业控制
人道领域1 天前
【面试八股速通篇01】锁与并发工具
java·开发语言·面试·c#
宇卿.1 天前
C#字段、属性、索引器、常量
开发语言·计算机视觉·c#
程序员Linc1 天前
ONNXOCRSharp 开源手记 02|v0.4.0 PDF识别
开发语言·pdf·c#·ocr·onnxocrsharp