OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5721|回复: 32

&=~与|=的区别是什么

[复制链接]

11

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-12-16
在线时间
15 小时
发表于 2017-12-23 17:41:56 | 显示全部楼层 |阅读模式
1金钱
TIM5->CR1&=~(1<<0);

TIM5->CR1|=0x01;
这两句有什么区别,目的是什么???

最佳答案

查看完整内容[请看2#楼]

位与用来清零,位或用来置位。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
582
金钱
582
注册时间
2017-6-2
在线时间
192 小时
发表于 2017-12-23 17:41:57 | 显示全部楼层
位与用来清零,位或用来置位。

回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-12-23 17:45:54 | 显示全部楼层
百度C语言位运算符。TIM5->CR1|=0X01就是TIM5->CR1 = (TIM5->CR1) | 0X01。都是C语言基础支持。
回复

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2017-12-25 17:36:38 | 显示全部楼层
zuozhongkai 发表于 2017-12-23 17:45
百度C语言位运算符。TIM5->CR1|=0X01就是TIM5->CR1 = (TIM5->CR1) | 0X01。都是C语言基础支持。


        SPI2->CR1|=0<<10;                //è&#171;&#203;&#171;1¤&#196;£ê&#189;       

        SPI2->CR1|=0<<11;                //8bitêy&#190;Y&#184;&#241;ê&#189;       
为什么原子老用这样的方式清零,有用吗?
         
回复

使用道具 举报

11

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-12-16
在线时间
15 小时
 楼主| 发表于 2017-12-25 23:50:01 | 显示全部楼层

移位清零很好用的
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-12-26 00:11:39 | 显示全部楼层
|=0 可以清0吗?可悲,可笑.
把一个变量先=0XFF,再试一下 |=0,看一下他哪个位清了0
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-12-26 00:15:31 | 显示全部楼层

原子哥有用这种方式清0变量吗?
可能是原子哥..这个..那个..写错了吧.
回复

使用道具 举报

11

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-12-16
在线时间
15 小时
 楼主| 发表于 2017-12-26 00:21:18 | 显示全部楼层
操作系统 发表于 2017-12-26 00:15
原子哥有用这种方式清0变量吗?
可能是原子哥..这个..那个..写错了吧.

或等与啊,为啥不能清零,a|=0<<1====>a=a|0<<1
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-12-26 00:23:16 | 显示全部楼层
COME 发表于 2017-12-26 00:21
或等与啊,为啥不能清零,a|=0

试一下就知道,多说无益.
回复

使用道具 举报

11

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-12-16
在线时间
15 小时
 楼主| 发表于 2017-12-26 00:23:30 | 显示全部楼层
操作系统 发表于 2017-12-26 00:15
原子哥有用这种方式清0变量吗?
可能是原子哥..这个..那个..写错了吧.

但是&=~这种清零的方法为啥要用?这个一直没有搞懂
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-12-26 00:26:12 | 显示全部楼层
我只能笑笑..
回复

使用道具 举报

11

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-12-16
在线时间
15 小时
 楼主| 发表于 2017-12-26 00:27:55 | 显示全部楼层

试了啊,没有的发现什么问题,我是初学者,懂的不多,见谅啊
回复

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2017-12-26 09:07:02 | 显示全部楼层
操作系统 发表于 2017-12-26 00:15
原子哥有用这种方式清0变量吗?
可能是原子哥..这个..那个..写错了吧.

论坛里f1程序源码例程里
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-12-26 09:21:25 | 显示全部楼层
ssssssssssss 发表于 2017-12-26 09:07
论坛里f1程序源码例程里

说实在的.我从来没有用过原子哥的代码过.
代码的对与错.你自己分清楚就好了.
他错了.你改正过来就OK了.
回复

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2017-12-26 09:24:40 | 显示全部楼层
操作系统 发表于 2017-12-26 09:21
说实在的.我从来没有用过原子哥的代码过.
代码的对与错.你自己分清楚就好了.
他错了.你改正过来就OK了.

驱动都自己写?
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-12-26 09:29:11 | 显示全部楼层
那谁帮你写??
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-12-26 09:30:30 | 显示全部楼层
驱动很简单呀.看一看,PDF或者相关的资料,或者别人的代码.就可以尝试写出来了呀.现在网络资料这么多.
很好学习.
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2017-12-27 09:16:33 | 显示全部楼层
|= 可以清零阿...

有些寄存器是寫0無效 寫1清零另一個寄存器

樓主看到的應該是這個

回复

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2017-12-27 15:17:52 | 显示全部楼层
操作系统 发表于 2017-12-26 09:21
说实在的.我从来没有用过原子哥的代码过.
代码的对与错.你自己分清楚就好了.
他错了.你改正过来就OK了.

你问一下原子,这个到底什么问题,他f7的程序里面也这么写
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-12-27 15:28:22 | 显示全部楼层
ssssssssssss 发表于 2017-12-27 15:17
你问一下原子,这个到底什么问题,他f7的程序里面也这么写

这个就不用问了吧.是个错.他也不方便认了这个错是吧.
你觉得谁是对的.就按谁的是去操作好了.按道理,原子哥,应该是很厉害的一个大神级人物.
出现这样子的低级错误,也是有点点点的小可能的.或者那个程序不是他本人做的.
回复

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2017-12-27 15:43:49 | 显示全部楼层
操作系统 发表于 2017-12-27 15:28
这个就不用问了吧.是个错.他也不方便认了这个错是吧.
你觉得谁是对的.就按谁的是去操作好了.按道理,原子 ...

说一下也可以,不误导初学者
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-12-27 15:45:57 | 显示全部楼层
你可以把他的代码教材贴出来.并且@一下相关大神.看一下..有没有其它的回复.
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2017-12-27 16:36:44 | 显示全部楼层
ssssssssssss 发表于 2017-12-27 15:43
说一下也可以,不误导初学者

原子發出的範例都測試過的

把實際代碼出處貼出來看看吧...
回复

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2017-12-27 17:28:41 | 显示全部楼层
本帖最后由 ssssssssssss 于 2017-12-27 17:33 编辑
civic7366 发表于 2017-12-27 16:36
原子發出的範例都測試過的

把實際代碼出處貼出來看看吧...

说的是一种位清零方式,你看看上面 SPI2->CR1|=0<<10;                //è&#171;&#203;&#171;1¤&#196;£ê&#189;        

        SPI2->CR1|=0<<11;                //8bitêy&#190;Y&#184;&#241;ê&#189;      
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2017-12-27 17:52:01 | 显示全部楼层
ssssssssssss 发表于 2017-12-27 17:28
说的是一种位清零方式,你看看上面 SPI2->CR1|=0

F1 F4 的實驗X? 直接說出處
回复

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2017-12-27 18:00:38 | 显示全部楼层
civic7366 发表于 2017-12-27 17:52
F1 F4 的實驗X? 直接說出處

f1历程里面很多是这么清零的,你可以自己下载看看
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2017-12-27 18:22:19 | 显示全部楼层
ssssssssssss 发表于 2017-12-27 18:00
f1历程里面很多是这么清零的,你可以自己下载看看

SPI2->CR1|=0<<11;    //8 bit data format 
剛看一下...這行只是為了後面的註釋阿...
你也太較真了






回复

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2017-12-28 15:59:41 | 显示全部楼层

并不是较真,你仔细看看上面讨论的问题
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2017-12-28 16:54:46 | 显示全部楼层
ssssssssssss 发表于 2017-12-28 15:59
并不是较真,你仔细看看上面讨论的问题

應該說那行用意本來就不是清0, 註解也沒有說是clear xx bit阿
加了那行就只是要註解那個bit是設定啥的

如果明知道那個bit原本就是0了
還硬要用&=~ 清0, 那當然也可以阿...

你可以看看如果在init以外的地方
又需要清零CR1某個bit的話就會是&=~ 了
回复

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2017-12-28 17:06:00 | 显示全部楼层
civic7366 发表于 2017-12-28 16:54
應該說那行用意本來就不是清0, 註解也沒有說是clear xx bit阿
加了那行就只是要註解那個bit是設定啥的
...

本意不是清零?spi设置8bit数据格式,看看是设置哪一位?
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2017-12-28 17:17:12 | 显示全部楼层
ssssssssssss 发表于 2017-12-28 17:06
本意不是清零?spi设置8bit数据格式,看看是设置哪一位?

任何數|0 還是等於原本的數,根本沒作用阿
那幹嘛要寫沒作用的代碼呢?
就只能是為了註解阿...
或為了之後好修改...不用再去翻datasheet等等...

原子應該沒想到有人會在這邊誤解成清0吧...

回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-12-28 17:47:29 | 显示全部楼层
真是有误导作用,对于新手来说 |= 0 还是不要出现为妙.他们以为这是清0的另一个写法
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-8-4
在线时间
3 小时
发表于 2018-1-31 12:24:42 | 显示全部楼层
本帖最后由 MaJichao 于 2018-1-31 12:30 编辑

首先,位清零用   &=~(1<<X) 操作,位置位用   |=1<<X 。这样清零/置位可以增加程序的可读性,左移几位就对应的某位清零/置位,在查看寄存器的功能分配时很方便
1<<X   除了第X位为1,其他都为0
~(1<<X)  除了第X位为0,其他都为1   ,然后这个数与寄存器的数进行与运算,第X位0与任何数与都为0,起到清零作用,其他位为1,和1相与不改变原值,所以起到位清零作用

位置位同理相似
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 23:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表