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

C语言-运算符

1. 按位与运算符(&

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

        ;否则为 0。

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

2. 按位或运算符(|

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

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

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

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

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

        相同则为 0。

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

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

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

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

5. 左移运算符(<<

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

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

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

6. 右移运算符(>>

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

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

        

// 示例
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

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


http://www.kler.cn/a/516374.html

相关文章:

  • 智慧冷库可视化监控系统
  • 服务器内部是如何运行的
  • 基于微信小程序的童装商城的设计与实现(LW+源码+讲解)
  • qml FileDialog 详解
  • 汇编与逆向(二)-汇编基础
  • 多管齐下以IP地址查询精度
  • 汇编实验·分支程序设计
  • fpga学习入门 串口rs232回环
  • 放大器版图绘制全流程
  • JavaScript系列(41)--状态管理实现详解
  • GitHub Actions 使用需谨慎:深度剖析其痛点与替代方案
  • 《OpenCV》——图像透视转换
  • Android实训十 数据存储和访问
  • 重构后的deap因子挖掘,多股票截面因子轮动,直接优化年化收益率。(附python代码)
  • 使用C#对指定的MYSQL数据库进行备份以及常见问题
  • 网络安全大模型和人工智能场景及应用理解
  • Android核心组件——Activity
  • 虹科分享 | 汽车NVH小课堂之听音辨故障
  • three.js+WebGL踩坑经验合集:写在前面的话
  • ubuntu20.04安装使用direct_visual_lidar_calibration标定雷达和相机