0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言中必须要掌握的位运算操作

汽车电子技术 来源:嵌入式之入坑笔记 作者: 嵌入式之入坑笔记 2023-02-10 14:19 次阅读

C语言中,特别是在嵌入式的开发中,位操作是很常用的一个知识点,涉及到按位(bit)操作的地方也是很常见的。本文分享一些C语言中的位操作运算的基础内容。

1、位与操作( & )

首先必须要区分位与(&)和逻辑与(&&),这两者之间看上去就是多一个少一个的区别,但是最终运算结果却是完全不同的。位与 & 的真值表:

pYYBAGPl4VmAedXFAAANBNq5WBA876.png

从上表可以看出,位与 & 的运算原则是:只有当参与运算的两个对象都是真(true 或 1)时,得到的运算结果才是 true 或 1 ,其它的都为flase 或 0。

位与 & 其实就是把参与运算的两个数先分别转换为二进制,然后再相与得到运算之后的结果,如下:

比如:0x01&0x03=0x01//运算如下:
0x01:0 0 0 1
0x03:0 0 1 1  
结果: 0 0 0 1

2、位或操作 ( | )

首先必须要区分位与(|)和逻辑与(||),这两者之间看上去就是多一个少一个的区别,但是最终运算结果却是完全不同的。位与 | 的真值表:

pYYBAGPl4WeAU8O9AAALyRcZCaI242.png

从上表可以看出,位与 | 的运算原则是:只要当参与运算的两个对象中有一个是真(true 或 1)时,得到的运算结果就是 true 或 1 ,只有两个都是 0 才为 flase 或 0。位与 | 其实就是把参与运算的两个数先分别转换为二进制,然后再相与得到运算之后的结果,如下:

比如:0x01 & 0x03 = 0x03   // 运算如下: 
0x01:0 0 0 1 
0x03:0 0 1 1
结果: 0 0 1 1

3、位取反操作(~)

位取反就是把十六进制数先转换为二进制,然后把对应的位取反(1 取反变为 0,0 取反变为1)。

比如:

比如:0x01 、 0x03  // 运算如下:
0x01:0 0 0 1        ~ 0x01:1 1 1 0   = 0x0D   

4、位异或操作( ^ )

位异或 ^ 的真值表:

pYYBAGPl4XeATPPQAAALgDXD2z0888.png

从上表可以看出,位异或 ^ 的运算原则是:当参与运算的两个对象中有一个是真(true 或 1)时,得到的运算结果就是 true 或 1 ;如果两个都是 0 就为 flase 或 0;两个都是 1 就为 flase 或 0。

总而言之就是:相同为0,不同为1。

比如:0x01 ^ 0x03 = 0x02   // 运算如下:
0x01:0 0 0 1
0x03:0 0 1 1
结果: 0 0 1 0 

5、位移操作(<< 、>>)

位移操作中,左移几位就在右边补几个0,右移几位就在左边补几个0,超出数值范围的部分则丢弃。如下:

poYBAGPl4YSAdsiIAAAfgPjHP7A547.png

6、位操作的实际运用

6.1、将特定位清零

如果想要把一个特定的数的某一个位清空(置零),使用位与 & 进行操作。比如:

pYYBAGPl4ZCAP9NTAAAjxJyHLHU136.png

6.2、将特定位置 1

如果想要把一个特定的数的某一个位清空(置零),使用位与 & 进行操作。比如:

poYBAGPl4ZqAPooeAAAjXd9ZosY196.png

6.3、特定位取反

如果想要把一个特定的数的某一个位取反,使用异或 ^ 进行操作。比如:

poYBAGPl4aeAGAssAAAfNQkHPzk279.png

注意:异或操作是相同为零,不同为1的运算原则!

6.4、获取特定二进制位

如果想要获取一个数中的某个或者某几个特定的二进制位,可以参考如下操作:

pYYBAGPl4bGAGc4jAAAxd1IqoKI814.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288465
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128732
  • bit
    bit
    +关注

    关注

    0

    文章

    47

    浏览量

    31853
收藏 人收藏

    评论

    相关推荐

    C语言中赋值运算符详解

    在C语言中,赋值运算符用于将一个值赋给变量。
    发表于 08-18 16:38 1036次阅读
    C<b class='flag-5'>语言中</b>赋值<b class='flag-5'>运算</b>符详解

    在单片机C语言中如何对变量的某一进行操作或赋值?

    在单片机C语言中如何对变量的某一进行操作或赋值?
    发表于 04-07 14:47

    【跟我学单片机C语言】详解运算符和表达式的运算

    运算符的作用是按对变量进行运算,但是并不改变参与运算的变量的值。如果要求按改变变量的值,
    发表于 12-07 13:51

    单片机的C语言中操作用法

    单片机的C语言中操作用法
    发表于 08-17 15:04

    C语言的底层操作

    原因,那就是C语言对底层操作做了很多的的支持,提供了很多比较底层的功能。   下面结合问题分别进行阐述。   问题:移位操作   在运用移位操作
    发表于 04-23 11:56

    C语言的几种操作运算

    在汇编语言中有直接对位进行操作的指令,如置、复位、取反、测试某一等,这对于硬件操作十分方便
    发表于 07-14 18:14

    C语言程序中运算操作

    在标准C语言的的教材中,对于运算操作是基本不涉及的,但是在单片机系统的程序中,需要经常操作
    发表于 07-14 07:45

    C语言中数学幂使怎样去计算的

    可以使用math.h中的pow函数来进行运算例如2^5为pow(2,5)而^运算符在C语言中异或运算
    发表于 07-15 10:32

    c语言中标志有什么作用?

    c语言中标志有什么作用?
    发表于 10-14 08:05

    C语言中三目运算符? :怎么使用?

    C语言中三目运算符? :怎么使用?
    发表于 11-02 09:23

    能不能在C语言中操作寄存器那样直接操作一个字节的单独一

       在C语言中通常操作只有真假两种状态的的数据时使用布尔bool变量比较多,如果需要同时观察多个状态,这时候选择操作效率会更高,用一个字
    发表于 02-25 06:13

    C语言操作有哪几种操作运算符呢

    C语言复习:一、操作:6种操作运算符二、define宏定义关键词define是
    发表于 02-25 06:00

    浅谈AVR c语言操作

    AVR c语言操作liquanhai 2009-09-17 02:48:00 3602 收藏 1分类专栏: 单片机C
    发表于 02-25 06:50

    程序员必须要掌握哪些语言

    随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随之带来的变化就是程序员需要跟进学习的语言也很多。但是语言这么多不可能都去一一掌握,在当前形式下,最需要
    的头像 发表于 12-10 14:15 3670次阅读

    C语言中什么是关系运算

    在C语言中,比较符称为关系运算符,所谓关系运算就是比较运算,将两个数值进行比较,判断其比较的结果是否符合给的的条件。
    的头像 发表于 03-09 10:47 1883次阅读