C语言中的位运算详解

简介: C语言中的位运算详解

在C语言中,位运算符用于对二进制位进行操作,包括左移、右移、按位与、按位或、按位异或和按位取反等操作。本文将详细介绍C语言中的位运算符,包括运算规则和具体的例子。

1. 位运算符概述

C语言提供了一些位运算符,用于直接操作二进制位,这些运算符通常用于底层系统编程和优化。以下是常用的位运算符:

  • <<:二进制左移
  • >>:二进制右移
  • &:按位与
  • |:按位或
  • ^:按位异或
  • ~:按位取反

这些运算符的运算规则都是基于二进制的补码运算。

2. 位左移和位右移运算符

2.1 二进制左移 <<

左移运算符(<<)将一个数的各二进制位全部左移指定的位数,左边的二进制位丢弃,右边补0。在一定范围内,数据每向左移动一位,相当于原数据乘以2。

示例:

int num = 3;
int result = num << 2;  // 3左移2位,相当于3 * 2的2次幂
// result的值为 12

2.2 二进制右移 >>

右移运算符(>>)将一个数的各二进制位全部右移指定的位数。正数左补0,负数左补1,右边丢弃。在一定范围内,数据每向右移动一位,相当于原数据除以2。

示例:

int num = 8;
int result = num >> 2;  // 8右移2位,相当于8除以2的2次幂
// result的值为 2

3. 按位与、按位或和按位异或运算符

3.1 按位与 &

按位与运算符(&)的运算规则是对应位都为1才为1,否则为0。

示例:

int a = 9;  // 0b00001001
int b = 7;  // 0b00000111
int result = a & b;  // 按位与
// result的值为 1,二进制为0b00000001

3.2 按位或 |

按位或运算符(|)的运算规则是对应位只要有一个为1即为1,否则为0。

示例:

int a = 9;  // 0b00001001
int b = 7;  // 0b00000111
int result = a | b;  // 按位或
// result的值为 15,二进制为0b00001111

3.3 按位异或 ^

按位异或运算符(^)的运算规则是对应位一个为1一个为0才为1,否则为0。

示例:

int a = 9;  // 0b00001001
int b = 7;  // 0b00000111
int result = a ^ b;  // 按位异或
// result的值为 14,二进制为0b00001110

4. 按位取反运算符 ~

按位取反运算符(~)的运算规则是对应位为1,则结果为0;对应位为0,则结果为1。

示例:

int num = 9;  // 0b00001001
int result = ~num;  // 按位取反
// result的值为 -10,二进制为0b11110110

5. 结合赋值运算符

结合赋值运算符的经验,位运算符也有类似的结合赋值运算符,例如:<<=, >>=, &=, |= 等。

示例:

int num = 5;
num <<= 2;  // 将num左移2位,相当于num乘以2的2次幂
// num的值为 20

6. 应用实例

6.1 特定位清零

char x = 53;  // 0b00110101
x = x & 252;  // 0b11111100
// x的值为 52,二进制为0b00110100

6.2 判断特定位是否为零

char x = 53;  // 0b00110101
x = x & 128;  // 0b10000000
if (x == 0) {
    printf("最高位为0\n");
} else {
    printf("最高位不为0\n");
}

6.3 保留特定位

char x = 53;  // 0b00110101
x = x & 15;   // 0b00001111

相关文章
|
7月前
|
算法 程序员 C语言
C语言位运算
C语言位运算
57 0
|
22天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
34 1
|
21天前
|
存储 算法 安全
C 语言中的位运算:挖掘底层计算的高效力量
位运算是C语言中直接操作二进制位的一种技术,能高效处理底层数据,广泛应用于优化算法、硬件编程等领域,是掌握C语言高级特性的关键之一。
|
3月前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。
|
7月前
|
算法 C语言 数据安全/隐私保护
【C 言专栏】C 语言中的位运算技巧
【5月更文挑战第2天】探索C语言中位运算的威力:高效处理标志位、数据压缩、加密及特定算法实现。了解位与(&)、或(|)、异或(^)、取反(~)和移位操作。通过示例代码学习判断奇偶、提取、设置和清除位。注意边界条件和可读性,利用位运算提升性能,结合位图和算法实现更多功能。掌握这些技巧,优化你的C语言编程。
193 53
【C 言专栏】C 语言中的位运算技巧
|
7月前
|
程序员 编译器 C语言
C语言中的位运算技术详解
C语言中的位运算技术详解
115 1
|
7月前
|
C语言
C语言自增减、逻辑运算、位运算、位移运算及三目运算操作
C语言自增减、逻辑运算、位运算、位移运算及三目运算操作
53 0
|
存储 机器学习/深度学习 传感器
|
存储 算法 C语言
C语言数组结合位运算实战-位移与查表
C语言数组结合位运算实战-位移与查表
107 0
|
存储 编译器 C语言
【C语言】数据以及位运算
【C语言】数据以及位运算
89 0