您好、欢迎来到现金彩票网!
当前位置:手机棋牌游戏平台 > 位操作 >

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

发布时间:2019-06-07 19:53 来源:未知 编辑:admin

  从51单片机转到其他的芯片时,总会遇到一个非常郁闷的问题,就是其他芯片有的也许没有位操作。所以最大的问题就是通过逻辑操作来改变一个字节的某个位。于是在这里总结一下关于位操作的一些表达式。

  首先,对一个字节,8位也好,16位也好,32位也好,只有两种操作,一种叫置位,一种叫清零。先从置位说起。

  全部操作很简单直接赋值就ok了。我们假设一个无符号字符型uchar为8位。且最低位为0,也就是说0-7位,而不是1-8位,那么改变值的状态只需要直接等于就ok了

  但这样做有一个问题,我每次改变数值时,还要先打开计算器,然后设置到2进制功能,然后要把我要选择的位输入进去,比如100,然后按16进制功能。然后计算器显示4。我觉得这样很麻烦。咋办呢,结果前辈们就想出了一个法子。通过位移的方法改变一个为,就变成了这样

  这样做的线,而不是1,因为我总是搞混,所以也告诫大家,小心着方面的错误,如果搞混,你的数据有可能出错)置1。那么a的值用2进制表示的线b,那么可能又会有人问,如果我想把第2和第3位置1怎么办呢?那么你可以这样

  这样做的意思是将二进制(11)位移到第二位的地方。那么第二位,是第一个1,第三位是第二个1。同理假如让第3位和低5位为1,第4位为0,怎么办。

  这样就可以实现101位移到第3位了,以上,基本是置位的大概操作了,当然这只是一次性的。也就是说,如果我希望1次只操作一个位,比如当a=00000001b时,我希望a的第二位也置1,且第一位仍然保持1,怎么办呢?那也有办法,可以采用与操作。例如:a为1,我希望a的第2位置1,且第1位保持不变,那么

  分析一下,看过c语言相关书籍的人大概都知道这个一个含有复合的赋值运算符的表达式。这个式子可以拆成:

  所以这个公式就可以使在不改变a=1的情况下,再使a的第2位变成1,这样的结果就是a=3。这就是这个公式的大概原理。

http://tritecbuilding.com/weicaozuo/122.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有