您的位置 首页 解答

单片机位操作的逻辑运算详解

从51单片机转到其他的芯片时,总会遇到一个非常郁闷的问题,就是其他芯片有的也许没有位操作。所以最大的问题就是通过逻辑操作来改变一个字

从51单片机转到其他的芯片时,总会遇到一个十分抑郁的问题,便是其他芯片有的或许没有位操作。所以最大的问题便是经过逻辑操作来改动一个字节的某个位。所以在这里总结一下关于位操作的一些表达式。

首要,对一个字节,8位也好,16位也好,32位也好,只要两种操作,一种叫置位,一种叫清零。先从置位说起。
置位能够对悉数位进行操作,也能够对某个位进行操作。
悉数操作很简单直接赋值就ok了。咱们假定一个无符号字符型uchar为8位。且最低位为0,也便是说0-7位,而不是1-8位,那么改动值的状况只需要直接等于就ok了
uchar a=0;
a=0xfe;
这样的话,就让a的低1-7方位1,a的0位不变
但这样做有一个问题,我每次改动数值时,还要先翻开计算器,然后设置到2进制功用,然后要把我要挑选的位输入进去,比方100,然后按16进制功用。然后计算器显现4。我觉得这样很费事。咋办呢,成果长辈们就想出了一个法子。经过位移的方法改动一个为,就变成了这样
uchar a=0;
a = (1<<5);
这样做的话,就把a的第6位(留意是第6为不是第5位,由于数据最低位是0,而不是1,由于我总是搞混,所以也劝诫咱们,当心着方面的过错,假设搞混,你的数据有或许犯错)置1。那么a的值用2进制表明的话那便是00100000b,那么或许又会有人问,假设我想把第2和第3方位1怎么办呢?那么你能够这样
uchar a=0;
a = (3<<1);
这样做的意思是将二进制(11)位移到第二位的当地。那么第二位,是第一个1,第三位是第二个1。同理假设让第3位和低5位为1,第4位为0,怎么办。
uchar a=0;
a = (5<<2);
这样就能够完成101位移到第3位了,以上,基本是置位的大约操作了,当然这仅仅一次性的。也便是说,假设我期望1次只操作一个位,比方当a=00000001b时,我期望a的第二位也置1,且第一位依然坚持1,怎么办呢?那也有方法,能够选用与操作。例如:a为1,我期望a的第2方位1,且第1位坚持不变,那么
uchar a=1;
a |= (1<<1);
这样就能够到达想要的成果了。然咱们来看看,这是为什么?
首要,a=1,变成二进制时,a=00000001b
然后再看下面的那个表达式
a |= (1<<1);
剖析一下,看过c言语相关书本的人大约都知道这个一个含有复合的赋值运算符的表达式。这个式子能够拆成:
a=a|(1<<1);
这样就不难理解了,(1<<1)的意思是把1左移1位,那么成果便是10b,把这个成果在和a进行或操作,咱们知道或操作是同为0成果才是0。
a 00000001
或操作 00000010
成果 00000011
所以这个公式就能够使在不改动a=1的情况下,再使a的第2位变成1,这样的成果便是a=3。这便是这个公式的大约原理。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/318786.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部