嵌入式中的位操作

位运算:

| & ^ ~  <<  >>

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

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=*

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

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值