关于stm32的问题:像GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X00000003; 中的“|”和“&”有什么区别?

我见有的代码有时候用“|”而有时候又用“&”,也有时候两者都不用,其实三者之间有什么区别和作用?
例如:GPIOD->ODR|=1<<2; EXTI->PR=1<<13; WWDG->CFR|=1<<9; WWDG->CFR&=0XFF80; if(TIM3->SR&0X0001)

|是“或”运算,用来设置寄存器或者变量的某些位为1而不影响其他位的状态,比如X|=0x0F,这样X的第四位被设置为1而高四位不受影响。
&是“与”运算,用清零寄存器或者变量的某写位而不影响其他位的状态,比如X&=0xF0,这样X的高四位保持原样,但低四位被清零了。
如果X=0xF0,那就是把X高四位设置为1,低四位设置为0。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-05
这是数字电路里最简单的概念啊。|和&就是或和与。
或的意思就是相加
0+0=0,0+1=1,1+0=1,1+1=1
也就是说一个数不管是多少,如果或1就是1.例如:x |= 1<<2; x的值为0x1100 0001那么结果就是0x1100 0101.因为1<<2就是0x0000 0100。原来是1或者0和0或还是不变。原来不管是1还是0和1或都是1.所以结果就是0x1100 0101。
与的意思就是相乘
0*0=0,0*1=0,1*0=0,1*1=1
if(TIM3->SR&0X0001)的意思就是前面的位不管,因为不管是多少乘以0还是0,这句话的意思是判断TIM3->SR最低位到底是1还是0,如果是0那么这个条件里的值就是0.如果是1就是1,条件为真。
建议还是从C基础学起。
第2个回答  2012-11-07
|是或运算 &与运算
相似回答