所谓的位运算: 一位一位的运算

    换而言之: 把要计算的数据转成二进制做运算 !

&    按位与

&0清零,&1保持不变

两个被操作数都转换为二级制,然后按位进行对比:

    见0为0 全 1 则 1

    A & B 为例子:

        A->转成二进制;   B->转成二进制!

    假如A = 10     对应二进制是:  1010

    假如B = 14     对应二进制是:  1110  &

    其相与后的结果为:                  1010       =    10      =         0x0A

|     按位或

   两个被操作数都转换为二级制,然后按位进行对比: 见1 为 1   全0则0

   A & B 为例子:

        A转成二进制        B转成二进制!

               假如A = 10 ->  1010

               假如B = 14 ->  1110  |

其按位或后的结果为 :  1110       =       14

~    按位取反

先将数据转换为二进制 ,之后对每一位都进行转变:0 变 1  ,  1 变 0。例如:

    unsigned char A =10;

    unsigned char B = ~A;

    ~B   ==  ~0000 1010    其按位取反后的结果为:

                    1111 0101    =  0xF5

^     按位异或

    异或 :两个被操作数都转换为二级制,然后按位进行对比:相同为0 不同为1

            假如A = 10 ->  1010

            假如B = 14 ->  1110  ^

按位异或后的结果       0100      =        4

<<    按位左移

    假如一个数需要左移(x)位,那么对应计算方法为 :高位舍去 (x) 位, 低位补 (x) 位0

  a<<1 也可以理解为  a 乘以2   

    unsigned char A = 0x10 为例子

    unsigned char B = A << 1;

    A ->       0001 0000 << 1         ==        0x10<<1             ==         16<<1

 结果为:  0010 0000                 ==         0x20                  ==          32

    unsigned char C = A << 3;

        A * 2 * 2 * 2 = 16*8 = 128

        1000 0000

>>    按位右移

    低位舍去  高位补0

     本质实际上是 移动一位 除以2

     unsigned char A = 0x10            对应十进制为: 16  

     unsigned char B = A >> 2;

     0001 0000 >> 2

        第一次右移:   0000 1000    对应十进制为: 8

        第二次右移:   0000 0100    对应十进制为: 4

位操作混合使用   嵌入式常用 

&=~   清0符    

&=~    是位运算组合,核心作用是「精准清零指定位,其他位不变」;

用法公式:变量 &= ~掩码,掩码中为 1 的位对应变量的位会被清零;

优势:比直接赋值更安全,不会误改其他位,是位操作的经典最佳实践。

|=     置1 符

|= 是按位或赋值,核心是「把变量中掩码为 1 的对应位设为 1,其他位不变」;

用法公式:变量 |= 掩码,掩码中 1 的位置就是要置 1 的位;

^=   取反符

^= 是按位异或赋值,核心作用是「精准翻转变量中掩码为 1 的对应位,其他位不变」;

用法公式:变量 ^= 掩码,掩码中 1 的位置就是要翻转的位,且多次执行可还原原状态;

                 

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐