位运算:

| & ^ ~  <<  >>

嵌入式因为对内存管理及寄存器的原因,经常需要进行位操作:

1、判断一个字节中的某位是0还是1

思路1:

1)将字节的中的该位右移到最低位->得到变量a;

2)变量a与0x01进行与操作,如果结果为0x01,则该位为1,如果结果为0x00,则该位为0;

unsigned char  ch = 0x40;//0100 0000

a = ch>>6;

a =a&0x01;

if(a==1) 第6位为1;

小结:跟与1的操作经常用来判断位的值。

思路2:

if(a&1<<n)   --->该位为1;

else  ----->该位为0;

 

2、将字节中的第n位置1

公式:int num;

num = num | 1<<n

unsigned char  ch = 0x00;     //0000 0000

for(int i = 0;i<8;i++)
{
      ch = ch | (0x01<<i);     //将ch的每一位依次置1
}

小结:采用或操作的方式,将字节的每一位都置1.

3、将字节中的第n位清0

公式:int num;

num = num & ~(1<<n)

总结:

1)将一个字节a的某一位置1(假设是第2位)----->采用或操作(只有要置的位为1,其余位为0,0x02;)

a = a|0x02;------>a的第二位为1,其余为保持不变。

2)将一个字节a的某一位置0(假设是第3位)---->采用与操作(只有要置的位为0,其余位为1,~0x04;)

a = a&~0x04;-------->a的第三位为0,其余位保持不变。

综上:要想使字节的某些位保持不变,有两种方法:

与0进行或运算: *|0=*

与1进行与运算:*&1=*

看具体情况,使用哪种方法。

 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐