按位操作符

本文介绍了按位操作符在嵌入式编程中的使用,包括按位与(&), 按位或(|)和按位异或(^)。通过实例展示了如何使用异或交换两个整数的值,以及如何用按位与和按位或进行位屏蔽和设置位。此外,还探讨了在硬件中如何利用这些操作符进行清零和设置高电平的操作,对于理解底层编程和嵌入式系统设计具有重要意义。
摘要由CSDN通过智能技术生成

按位操作符

按位与(&):1 & 0 = 0,0 & 0 = 0 ,1 & 1 = 1

按位或(|):1 | 1 = 1,1 | 0 = 1,0 | 0 = 0

按位异或(^):1 ^ 0 = 1,1 ^ 1 = 0 ,0 ^ 0 = 0 (不同为1,相同为0)

异或应用:交换两个整型变量的值,并且不使用第三方中间变量

方法一:

int main()
{
    int a = 3;int b = 5;
	a = a + b;
	b = a - b;
	a = a - b;
    return 0;
}

方法一缺点:如果数值太大,相加后可能会造成int型溢出,导致数值丢失,一般不采用

方法二:使用异或的方法

int main()
{
    int a = 3;int b = 5;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
    return 0;
}

&(按位与) 、l(按位或)在嵌入式中的常用方式

&:

作用一:屏蔽

A& 0 ----> 0

int a = 0x1234;
a & 0xff00//屏蔽低8bit,取出高8bit

A&1 —>A

作用二:取出

所以&在硬件中又叫做 清零器 clr

|:

A | 0 ===A -> 保留

A | 1 === 1 -> 设置为高电平的方法,设置set

例子:

1.设置一个资源的bit5为高电平,其他位不变

int a;

(bit5 ,1后面有5个0,从0bit开始)

a = a | 100000 ===> a =(a | (0x01<<5));(一般这样写,将1左移到bit5的位置,然后或运算)

总结:a | (0x01<<n):第n位设高电平,其他位保持不变

2.清除第5位(&运算)

int a;

a= a & 0 11111 31 ==> a & 31 :这样写的话,32位系统的高位可能会被修改,而且这样固定数值的可移植性差;

所以最好写成这样:~(0x01<<5):先把1左移5位,然后取反,第5位就变为0,其余位都是1,即 a = a & ~(0x01<<5);

总结:a & (~(0x01<<n)):第n位设低电平,其他位保持不变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值