当前位置: 首页 > news >正文

【18】C语言位运算符详解

【18】C语言位运算符详解

文章目录

  • 一、基本位运算符
    • 1.1 按位与(&)
    • 1.2 按位或(|)
    • 1.3 按位异或(^)
    • 1.4 按位取反(~)
  • 二、移位运算符
    • 2.1 左移(<<)
    • 2.2 右移(>>)
  • 三、实用示例
    • 3.1 位操作常用技巧
    • 3.2 完整示例程序
  • 四、注意事项

位运算符是C语言中用于直接操作二进制位的运算符,它们对整型数据的二进制表示进行位级别的操作。位运算符在嵌入式开发、加密算法、图形处理等领域有广泛应用,掌握它们对于编写高效的低级代码非常重要。

一、基本位运算符

1.1 按位与(&)

int a = 5;    // 二进制: 0101
int b = 3;    // 二进制: 0011
int result = a & b;  // 结果: 0001 (十进制1)

真值表:

0 & 0 = 0
0 & 1 = 0  
1 & 0 = 0
1 & 1 = 1

应用场景:

  • 检查特定位是否为1
  • 清除特定位(用0与目标位进行与操作)

1.2 按位或(|)

int a = 5;    // 二进制: 0101
int b = 3;    // 二进制: 0011
int result = a | b;  // 结果: 0111 (十进制7)

真值表:

0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1

应用场景:

  • 设置特定位为1

1.3 按位异或(^)

int a = 5;    // 二进制: 0101
int b = 3;    // 二进制: 0011
int result = a ^ b;  // 结果: 0110 (十进制6)

真值表:

0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0

特性:

  • 相同为0,不同为1
  • 任何数与0异或保持不变
  • 任何数与自己异或结果为0

1.4 按位取反(~)

int a = 5;    // 二进制: 0000 0101
int result = ~a;     // 结果: 1111 1010 (取决于整数位数)

应用场景:

  • 求补码(负数表示)
  • 位反转操作

二、移位运算符

2.1 左移(<<)

int a = 5;    // 二进制: 0101
int result = a << 2; // 结果: 10100 (十进制20)

特性:

  • 左移n位相当于乘以2ⁿ
  • 空出的低位补0

2.2 右移(>>)

int a = 20;   // 二进制: 10100
int result = a >> 2; // 结果: 00101 (十进制5)

特性:

  • 右移n位相当于除以2ⁿ(向下取整)
  • 对于有符号数,高位补符号位(算术右移)
  • 对于无符号数,高位补0(逻辑右移)

三、实用示例

3.1 位操作常用技巧

// 设置第n位为1
x = x | (1 << n);// 清除第n位(设为0)
x = x & ~(1 << n);// 切换第n位(0变1,1变0)
x = x ^ (1 << n);// 检查第n位是否为1
if (x & (1 << n)) {// 第n位为1
}// 检查奇偶性
if (x & 1) {// 奇数(最低位为1)
} else {// 偶数(最低位为0)
}

3.2 完整示例程序

#include <stdio.h>void printBinary(int num) {for (int i = 31; i >= 0; i--) {printf("%d", (num >> i) & 1);if (i % 4 == 0) printf(" ");}printf("\n");
}int main() {int a = 29;  // 二进制: 0001 1101int b = 15;  // 二进制: 0000 1111printf("a = %d, 二进制: ", a);printBinary(a);printf("b = %d, 二进制: ", b);printBinary(b);printf("a & b = %d, 二进制: ", a & b);printBinary(a & b);printf("a | b = %d, 二进制: ", a | b);printBinary(a | b);printf("a ^ b = %d, 二进制: ", a ^ b);printBinary(a ^ b);printf("~a = %d, 二进制: ", ~a);printBinary(~a);printf("a << 2 = %d, 二进制: ", a << 2);printBinary(a << 2);printf("a >> 2 = %d, 二进制: ", a >> 2);printBinary(a >> 2);return 0;
}

四、注意事项

  1. 运算符优先级: 位运算符的优先级低于算术运算符
  2. 移位位数限制: 移位位数应小于操作数的位数
  3. 有符号数右移: 结果依赖于具体实现(算术右移或逻辑右移)
  4. 负数移位: 可能产生未定义行为,需谨慎处理
http://www.dtcms.com/a/550694.html

相关文章:

  • 基于SpringBoot+Vue的中凯农场农资管理系统(权限分配、Echarts图形化分析)
  • 电子取证之windows知识点:从 0 到 1 掌握 Windows 事件日志取证:以 玄机靶场-第五章 Windows 实战-evtx 文件分析
  • UVa 11853 Paintball
  • 北京网站制作公司兴田德润在那里中国最新领导班子
  • 优秀网站seo报价wordpress亚马逊cdn
  • 韶关网站设计公司建设网站 请示 报告
  • 网站开发 兼职挣钱吗WordPress dux3.0
  • 建设网站和公告号的意义网上平台
  • 磁盘分区方案GPT和MBR的区别浅谈
  • 怎么用ps做网站首页字贵阳大数据论坛
  • php p2p网站源码网站icp备案申请流程
  • Java的Stream详解
  • 国家网站备案查询定制开发教程
  • MySQL安装及启用(社区版)
  • whois域名查询网站iis 添加网站 win7
  • 图像分割深度学习学习总结
  • 中铁建设集团网站能用VUE做网站
  • 网站超链接怎么做 word文档网页设计免费模板网站推荐
  • 网站支付接口怎么做百度站长怎么做网站维护
  • 查建筑材料的网站大数据系统
  • 建设银行 北京招聘网站网站代码 公告栏 php
  • leetcode3040.相同分数的最大操作数目II
  • dz网站标题公司做网站的费用用途写什么
  • 从局域网工具到全球传输:FastSend的无服务器共享革命
  • PostgreSQL 定位索引损坏位置
  • 做网站销售怎么找客户用群晖做网站服务器
  • 兰州做高端网站的公司查做外贸客户的网站
  • 打工人日报#20251030
  • 馆陶企业做网站推广构建网站需要会什么意思
  • H264的码流结构