• 【C语言】位操作符详解



    前言

    大家好我是艾老虎尤,在计算机编程的世界中,操作符是程序员的得力工具之一,它们允许我们执行各种任务,从简单的数学计算到复杂的逻辑运算。而在C语言中,位操作符(Bitwise Operators)则为我们提供了一种独特的能力,让我们可以直接操作二进制数据,掌握这些操作符,就像是解锁了编程的另一扇神秘大门,如果你是初学者,或者只是对这些操作符感到好奇,那么这篇博客将为你揭开其中的奥秘,话不多说,我们直接开始!


    课前小提示

    对于原码反码补码不清楚的同学可以其看看我这一篇文章,里面讲解的很详细。
    https://mp.csdn.net/mp_blog/creation/editor/130591281

    1. 位与操作符(&):

    位与操作符用于取两个操作数的按位与结果。其规则是,只有当两个对应的二进制位都为1时,结果为1;否则结果为0。下面是一个示例代码:

    #include 
    
    int main() {
       unsigned int a = 14; // 二进制数 00001110
       unsigned int b = 13; // 二进制数 00001101
       unsigned int result = a & b; // 按位与操作
       printf("a & b 的结果是: %d", result); // 输出 12,即二进制数 00001100
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2. 位或操作符(|):

    位或操作符用于取两个操作数的按位或结果。规则是,只有当两个对应的二进制位都为0时,结果为0;否则结果为1。下面是一个示例代码:

    #include 
    
    int main() {
       unsigned int a = 14; // 二进制数 00001110
       unsigned int b = 13; // 二进制数 00001101
       unsigned int result = a | b; // 按位或操作
       printf("a | b 的结果是: %d", result); // 输出 15,即二进制数 00001111
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3. 位异或操作符(^):

    位异或操作符用于取两个操作数的按位异或结果。规则是,只有当两个对应的二进制位不相同时,结果为1;否则结果为0。下面是一个示例代码:

    #include 
    
    int main() {
       unsigned int a = 14; // 二进制数 00001110
       unsigned int b = 13; // 二进制数 00001101
       unsigned int result = a ^ b; // 按位异或操作
       printf("a ^ b 的结果是: %d", result); // 输出 3,即二进制数 00000011
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4. 位取反操作符(~):

    位取反操作符用于对操作数的每个二进制位取反,即将1变为0,0变为1。下面是一个示例代码:

    #include 
    
    int main() {
       unsigned int a = 14; // 二进制数 00001110
       unsigned int result = ~a; // 位取反操作
       printf("~a 的结果是: %u", result); // 输出 4294967281,即二进制数 11110001 11110001 11110001 11110001 
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5. 左移操作符(<<):

    左移操作符用于将一个数的所有二进制位向左移动指定的位数。移动后右边空出的位用0填充。下面是一个示例代码:

    #include 
    
    int main() {
       unsigned int a = 5; // 二进制数 0000000000000101
       unsigned int result = a << 2; // 左移2位
       printf("a 左移2位的结果是: %u", result); // 输出 20,即二进制数 0000000000010100
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6. 右移操作符(>>):

    右移操作符用于将一个数的所有二进制位向右移动指定的位数。移动后左边空出的位用符号位的值(对于有符号数)或0填充(对于无符号数)。下面是一个示例代码:

    #include 
    
    int main() {
       int a = -10; // 二进制数 1111111111110110
       int result = a >> 2; // 右移2位
       printf("a 右移2位的结果是: %d", result); // 输出 -3,即二进制数 1111111111111101
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    总结

    位操作符是C语言中的一项强大工具,它们使得我们可以直接处理二进制数据,执行位级别的操作。通过掌握这些操作符,你可以编写更高效、更灵活的代码,解决各种编程难题。在这篇博客中,我们深入研究了按位与、按位或、按位异或、按位取反、左移位和右移位等操作符。

    无论你是初学者还是有经验的程序员,中位操作符都值得深入学习和理解。它们不仅可以提高你的编程技能,还能帮助你写出更高效的代码,更好地解决问题。希望这篇博客能够为你提供有关中位操作符的全面知识,并激发你在C语言编程中的创造力。愿你在编程的道路上越走越远,不断探索这个精彩的世界!

  • 相关阅读:
    redis高可用之主从复制、哨兵模式、集群的概述及部署
    RabbitMQ配置文件_修改RabbitMQ MQTT的1883端口
    强强/视频SDK:VisioForge SDKs .Net 15.6.8 Crack
    深度剖析动态规划算法:原理、优势与实战
    qt完善登录框
    10_springAOP基础_JDK动态代理
    vue3中vue-pdf-embed实现放大、缩小、上一页、下一页、滚动翻页功能(pdf文件预览)
    【21天打卡】前端攻城狮重学算法之-直接选择排序
    各种符号地址,可以直接复制粘贴使用
    在DOS或Windows环境中,使用工具Debug
  • 原文地址:https://blog.csdn.net/qq_69611919/article/details/132891087