C语言位运算符有哪些?分别有什么作用和使用场景

来源:站长联盟作者:广州网站建设头衔:草根站长
导读:本期聚焦于小伙伴创作的《C语言位运算符有哪些?分别有什么作用和使用场景》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C语言位运算符有哪些?分别有什么作用和使用场景》有用,将其分享出去将是对创作者最好的鼓励。

C语言位运算符是直接对整数的二进制位进行操作的运算符,运算时直接作用于数据的二进制表示,不需要转换为十进制再进行操作,因此执行效率比普通的算术运算符更高,在嵌入式开发、系统编程、数据处理等领域有广泛应用。

C语言位运算符有哪些?分别有什么作用和使用场景

C语言常见位运算符分类

C语言提供的位运算符主要分为六类,分别对应不同的二进制位操作逻辑,具体分类和符号如下:

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

各运算符运算规则与作用

按位与运算符&

按位与的规则是两个操作数对应的二进制位都为1时,结果位才为1,否则为0。它的常见作用包括清零特定位、获取特定位的值、判断奇偶性。

比如判断一个整数是奇数还是偶数,只需要让该数和1做按位与运算,结果为1则是奇数,结果为0则是偶数:

#include <stdio.h>

int main() {
    int num = 7;
    // 判断奇偶性,奇数二进制最后一位为1,和1按位与结果为1
    if (num & 1) {
        printf("%d是奇数n", num);
    } else {
        printf("%d是偶数n", num);
    }
    return 0;
}

按位或运算符|

按位或的规则是两个操作数对应的二进制位只要有一个为1,结果位就为1,两个都为0时结果位才为0。它的主要作用是将特定位设置为1。

比如要把一个整数的低4位全部设置为1,只需要让该数和0b1111(十进制15)做按位或运算:

#include <stdio.h>

int main() {
    int num = 10; // 二进制为1010
    int mask = 15; // 二进制为1111
    int result = num | mask; // 结果为1111,十进制15
    printf("结果:%dn", result);
    return 0;
}

按位异或运算符^

按位异或的规则是两个操作数对应的二进制位不同时结果位为1,相同时结果位为0。它的常见作用包括交换两个变量的值、翻转特定位、数据简单加密。

不用临时变量交换两个变量的经典写法就是利用异或运算:

#include <stdio.h>

int main() {
    int a = 3, b = 5;
    printf("交换前:a=%d, b=%dn", a, b);
    a = a ^ b;
    b = a ^ b; // 等价于(a^b)^b = a
    a = a ^ b; // 等价于(a^b)^a = b
    printf("交换后:a=%d, b=%dn", a, b);
    return 0;
}

取反运算符~

取反运算符是单目运算符,规则是将操作数对应的二进制位全部取反,1变0,0变1。需要注意C语言中整数采用补码表示,取反后结果会受符号位影响。

#include <stdio.h>

int main() {
    unsigned int num = 0; // 无符号0,二进制全0
    printf("取反结果:%un", ~num); // 全1,对应无符号最大值
    int signed_num = 0; // 有符号0
    printf("有符号取反结果:%dn", ~signed_num); // 结果为-1
    return 0;
}

左移运算符<<

左移运算符将操作数的二进制位向左移动指定的位数,高位丢弃,低位补0。左移n位相当于乘以2的n次方,效率比乘法运算高。

#include <stdio.h>

int main() {
    int num = 3; // 二进制11
    int result = num << 2; // 左移2位,变成1100,十进制12
    printf("3左移2位结果:%dn", result); // 3*2^2=12
    return 0;
}

右移运算符>>

右移运算符将操作数的二进制位向右移动指定的位数,低位丢弃。对于无符号数,高位补0;对于有符号数,高位补符号位(正数补0,负数补1)。右移n位相当于除以2的n次方,向下取整。

#include <stdio.h>

int main() {
    unsigned int u_num = 8; // 二进制1000
    int s_num = -8; // 补码表示
    printf("无符号8右移2位:%un", u_num >> 2); // 2,8/4=2
    printf("有符号-8右移2位:%dn", s_num >> 2); // -2,-8/4=-2
    return 0;
}

位运算符使用注意事项

  • 位运算符只适用于整数类型(char、short、int、long等),不能用于浮点数。
  • 进行位运算时,操作数会自动进行整型提升,运算结果的类型也会对应提升。
  • 右移有符号数时,不同编译器对符号位填充的处理可能一致,但标准规定补符号位是合法行为,编写跨平台代码时建议对无符号数使用右移。
  • 位运算的优先级低于算术运算符,高于关系运算符和逻辑运算符,混合运算时建议加上括号明确优先级。
运算符含义示例结果说明
&按位与5 & 35是101,3是011,结果为001即1
|按位或5 | 3结果为111即7
^按位异或5 ^ 3结果为110即6
~取反~55的补码取反,结果为-6
<<左移5 << 1101左移1位为1010即10
>>右移5 >> 1101右移1位为10即2

C语言位运算符位运算位操作修改时间:2026-06-30 05:06:34

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。