位运算:
| & ^ ~ << >>
嵌入式因为对内存管理及寄存器的原因,经常需要进行位操作:
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=*
看具体情况,使用哪种方法。