一个关于430单片机,程序语句的问题,请各位多多指教

UCSCTL4|=SELA__XT1CLK+SELS__XT1CLK+SELM__XT1CLK和UCSCTL4=SELA__XT1CLK+SELS__XT1CLK+SEL... UCSCTL4 | =SELA__XT1CLK+SELS__XT1CLK + SELM__XT1CLK 和
UCSCTL4 =SELA__XT1CLK+SELS__XT1CLK + SELM__XT1CL 到底有什么区别?
能不能帮解释一下, |= 和 =区别在哪?学了一段时间,发现自己对这个问题很迷惑了,求指教,谢谢
展开
 我来答
lkjsdflkjsdfnv
2012-06-26
知道答主
回答量:24
采纳率:0%
帮助的人:28.2万
展开全部
这个问题,我也曾经是很难理解,这里牵涉到两个概念
1,|= 和 = 的基本区别
2,UCSCTL4 在上面的两个方式下会发生什么不一样的变化

这样回答你把,可能比较好理解
1,对于 |= 和 = 的基本区别
直接等于的话,是会把原来的UCSCTL4 的值给抹掉,然后再赋给一个全新的值,就是说和原来的值没有任何关系了。
但是|= 呢,和原来的值有直接的关系,只是拉高了 等于 号后面对应位为1的值,而等于号后面位原来为0的值还是0,原来为1的值还是1,举个例子

UCSCTL4 = 0x1F; // (0b1000 1111)
UCSCTL4 = 0x11;

上面的那句话执行之后,就和开始的值为0x1F值没有任何关系了,最后得到的值就是 0x11;

UCSCTL4 = 0x8F;
UCSCTL4 = 0x11; //(0b0001 0001)
这个执行之后,就和原来的0x1F有关系,实际上就做了一个位运算
0b1000 1111
0b0001 0001 ,拉高最后一位,以及倒数第5位和倒数第8位
-----------------
0b1001 1111
最后的值是 0x1F,原来的倒数第8,3,2位,因为和0一起运算,所以本身是1,最后还是1;

2,UCSCTL4 在上面的两个方式下会发生什么不一样的变化,现在你大概能够明白了把,如果把(SELA__XT1CLK+SELS__XT1CLK + SELM__XT1CL)看成我们上面例子的0x11 的话,那么最后的结果,对于两种运算方式来说,一种是和原来的值有关系,一种是和原来的值没有关系。
dmjcq
2012-06-26 · TA获得超过312个赞
知道小有建树答主
回答量:317
采纳率:0%
帮助的人:191万
展开全部
首先你要知道 | 是或运算.
其次 a|=b , 这样的写法等同于 a=a|b;
最后 UCSCTL4 | =SELA__XT1CLK+SELS__XT1CLK + SELM__XT1CLK
等同于 UCSCTL4 =UCSCTL4 |(SELA__XT1CLK+SELS__XT1CLK + SELM__XT1CLK )
这样的运算也可以扩展为 a+=b,a-=b等等
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
long05931
2012-06-26 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:180
采纳率:0%
帮助的人:84.7万
展开全部
|= 符号前后的值进行或运算后 将值赋给前面的变量
= 仅仅是把后面的值赋给前面的变量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式