打印
[STM32F1]

求大神while(!(RCC->CR>>17))详细解释

[复制链接]
4460|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gubaoqiangs|  楼主 | 2014-6-22 11:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
while(!(RCC->CR>>17))与while(!(RCC->CR>>17)&0x01)的区别,!的优先级高于&,!是对第17位取反还是整个数值,能用数字说明一下RCC->CR是怎么右移的,右移后17位变成第0位了么
沙发
gubaoqiangs|  楼主 | 2014-6-22 12:50 | 只看该作者
这么多大神,来个解惑的啊,while(!(RCC->CR>>17)),右移17,第31位前面不全补0么,取反之后,那么while不应该一直是while(1)么

使用特权

评论回复
板凳
airwill| | 2014-6-22 19:04 | 只看该作者
while(!(RCC->CR>>17)) 这是个C基础问题.
(RCC->CR>>17) 的判断真值是非零, 相对于判断 ((RCC->CR>>17) !=0)
取非后, (!(RCC->CR>>17))  相对于 ((RCC->CR>>17)==0)

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
gubaoqiangs + 1 很给力!
地板
戈卫东| | 2014-6-22 19:25 | 只看该作者
应该是一个不好的写法。

使用特权

评论回复
5
一清如水| | 2014-6-22 19:56 | 只看该作者
!(RCC->CR>>17 表示的是逻辑非,它只有 1 或0 两种值, 再与 0x01 按位与,其实期决定作用的都是前者,后者和没加一样。!(RCC->CR>>17,表示判断  23-17位,是不是都是零,若都是零则则进入循环,之所以右移,是为了剔除后17位的影响。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

23

帖子

0

粉丝