位运算(&、|、^、~、>>、<<)

一、概念

在C#中,位运算是对整数的二进制表示进行操作的运算。这些运算包括按位与(AND)、按位或(OR)、按位异或(XOR)、按位取反(NOT)、左移(Left Shift)和右移(Right Shift)等。

下面是一些位运算的示例和说明:

符号 描述 运算规则
& 两个位都为1时,结果才为1
| 两个位都为0时,结果才为0
^ 异或 两个位相同为0,相异为1
~ 取反 0变1,1变0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补0
>> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)
1. 按位与(AND)

& 两个位都为1时,结果才为1。

csharp 复制代码
uint a = 60; // 二进制: 0011 1100  
uint b = 13; // 二进制: 0000 1101  
uint c = a & b; // 结果: 12, 二进制: 0000 1100
2. 按位或(OR)

| 两个位都为0时,结果才为0。

csharp 复制代码
uint a = 60; // 二进制: 0011 1100  
uint b = 13; // 二进制: 0000 1101  
uint c = a | b; // 结果: 61, 二进制: 0011 1101
3. 按位异或(XOR)

^ 相同为0,相异为1。

csharp 复制代码
uint a = 60; // 二进制: 0011 1100  
uint b = 13; // 二进制: 0000 1101  
uint c = a ^ b; // 结果: 49, 二进制: 0011 0001
4. 按位取反(NOT)

~ 0变1,1变0。

csharp 复制代码
uint a = 60; // 二进制: 0011 1100  
uint b = ~a; // 结果的二进制依赖于具体的位数和类型,对于uint通常是取反后加1(因为uint是无符号的)
5. 左移(Left Shift)

<< 各二进位全部左移若干位,高位(左侧)丢弃,低位(右侧)补0。

csharp 复制代码
uint a = 60; // 二进制: 0011 1100  
uint b = a << 2; // 结果: 240, 二进制: 1111 0000
6. 右移(Right Shift)

>> 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)。

csharp 复制代码
uint a = 240; // 二进制: 1111 0000  
uint b = a >> 2; // 结果: 60, 二进制: 0011 1100
相关推荐
c#上位机2 小时前
halcon刚性变换(平移+旋转)——vector_to_rigid
图像处理·人工智能·计算机视觉·c#·halcon
Miss_SQ2 小时前
Webgl打包后删除StreamingAssets文件夹下多余资源
unity·c#·webgl
小猪快跑爱摄影2 小时前
【AutoCad 2025】【C#】零基础教程(二)——遍历 Entity 插件 =》 AutoCAD 核心对象层级结构
开发语言·c#·autocad
烛阴3 小时前
C# Dictionary 入门:用键值对告别低效遍历
前端·c#
Monkey_Xuan6 小时前
C#中的引用传递和值传递
unity·c#
CreasyChan6 小时前
C# LINQ 深度解析:优缺点与性能陷阱
unity·c#·游戏开发
精神小伙就是猛7 小时前
C# sealed密封 追本溯源
开发语言·c#
雨季6668 小时前
C 语言学习指南:从入门到实战的系统路径
c#
缺点内向12 小时前
如何在 C# 中创建、读取和更新 Excel 文档
c#·.net·excel
c#上位机12 小时前
halcon创建对象数组——concat_obj
图像处理·计算机视觉·c#·halcon