C语言-运算符

  1. 按位与运算符(&

按位与运算符对两个整数的每一位执行"与"操作。只有当两个相应位都为 1 时,结果才为 1

;否则为 0。

复制代码
cpp 复制代码
// 示例
int a = 5;      // 二进制: 0101
int b = 3;      // 二进制: 0011
int result = a & b;  // 结果: 0001,即 1

2. 按位或运算符(|

按位或运算符对两个整数的每一位执行"或"操作。只要对应的位之一为 1,结果就为 1;

只有两个位都是 0 时,结果才为 0。

cpp 复制代码
// 示例
int a = 5;      // 二进制: 0101
int b = 3;      // 二进制: 0011
int result = a | b;  // 结果: 0111,即 7

3. 按位异或运算符(^)

按位异或运算符对两个整数的每一位执行"异或"操作。当两个相应位不相同时,结果为 1;

相同则为 0。

cpp 复制代码
// 示例
int a = 5;      // 二进制: 0101
int b = 3;      // 二进制: 0011
int result = a ^ b;  // 结果: 0110,即 6

4. 按位取反运算符( ~ )

按位取反运算符会将操作数的每一位都取反,即将 1 变为 0,将 0 变为 1。

cpp 复制代码
// 示例
int a = 5;      // 二进制: 0101
int result = ~a;  // 结果: 1010(对于 32 位系统,它会是 -6)

5. 左移运算符(<<

左移运算符将操作数的所有位向左移动指定的位数。移动时,空出的低位填充 0。

左移实际上是将数字乘以 2 的指定次方。

cpp 复制代码
// 示例
int a = 5;      // 二进制: 0101
int result = a << 1;  // 结果: 1010,即 10

6. 右移运算符(>>

右移运算符将操作数的所有位向右移动指定的位数。对于无符号整数,空出的高位

会填充 0;对于有符号整数,空出的高位会填充符号位(即补充 0 或 1,取决于符号位)。

cpp 复制代码
// 示例
int a = 5;      // 二进制: 0101
int result = a >> 1;  // 结果: 0010,即 2

7. 算术右移与逻辑右移

算术右移:保留符号位,高位补充符号位(负数补充 1,正数补充 0)。

逻辑右移:无论符号,始终将高位补充为 0。

8. 使用场景

位运算通常用于以下场景:

优化性能:位运算通常比算术运算更高效。

权限标志:在操作系统或嵌入式系统中,位运算常用于存储和检查多个状态位或权限

标志。

加密与解密:许多加密算法使用位运算。

二进制数据处理:位运算常用于直接操作二进制数据,如图像处理、压缩算法等。

9. 总结

运算符 描述 示例
& 按位与 a & b
` ` 按位或
^ 按位异或 a ^ b
~ 按位取反 ~a
<< 左移 a << 1
>> 右移 a >> 1

位运算提供了高效、低级别的运算方式,用于处理二进制数据,广泛应用于系统编程和硬件控制等领域。

相关推荐
米尔的可达鸭3 分钟前
深入操作系统 Socket 底层:EPOLLOUT 可写事件管理 + 非阻塞异步
开发语言·网络·数据结构·经验分享·websocket·网络协议
SimonKing5 分钟前
Spring Boot 4.0 + gRPC 极简集成:4步搞定,比REST还丝滑
java·后端·程序员
前端进阶之旅8 分钟前
Next.js 16.3 新特性全解析 AI 驱动开发与 Instant Navigations 实战指南
开发语言·javascript·人工智能
C++、Java和Python的菜鸟8 分钟前
第3章 后端Web基础 (Maven)
java
小小编程路10 分钟前
Java super 关键字详解:用法、场景与常见误区
java·开发语言
我登哥MVP19 分钟前
走进 Gang of Four 设计模式:外观模式
java·设计模式·外观模式
薛定猫AI26 分钟前
【技术干货】大模型检查点可靠性评测:基于 Python 构建幻觉与指令遵循测试
开发语言·python
文祐33 分钟前
C语言利用数组计算矩阵乘法
c语言·开发语言·矩阵
matlab代码35 分钟前
Matlab基于主成分分析PCA人脸识别系统(GUI界面)【源码44期】
开发语言·matlab·人脸识别
tiancaijiben37 分钟前
阿里云SAE应用引擎弹性扩缩容完全指南:从手动调控到智能自动化
java·网络·数据库