打印
[STM32F1]

请教一条语句i = (i >> 6) << 6;

[复制链接]
1840|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cooldog123pp|  楼主 | 2018-9-10 15:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天看别人的程序,看到一条语句i = (i >> 6) << 6;
注释这么写:// Round Accelerat Rate to Increment of 64
问下各位大神,i为啥先有右移6位再左移6位,有啥作用,求教一下。
沙发
huzi2099| | 2018-9-10 16:32 | 只看该作者
低六位清0

使用特权

评论回复
板凳
labasi| | 2018-9-11 19:13 | 只看该作者
楼上正解啊

使用特权

评论回复
地板
paotangsan| | 2018-9-11 19:20 | 只看该作者
我也不理解这句话的意思

使用特权

评论回复
5
renzheshengui| | 2018-9-11 19:23 | 只看该作者
是不是有那个什么逻辑啥的

使用特权

评论回复
6
huzi2099| | 2018-9-12 08:22 | 只看该作者

使用特权

评论回复
7
cooldog123pp|  楼主 | 2018-9-12 11:03 | 只看该作者

好的了解了,多谢,学习了,这种小技巧,确实书上是没有的。

使用特权

评论回复
8
八层楼| | 2018-9-12 12:32 | 只看该作者
百度上是不是可以搜索到

使用特权

评论回复
9
观海| | 2018-9-12 12:35 | 只看该作者
按理说可以

使用特权

评论回复
10
wowu| | 2018-9-12 19:29 | 只看该作者
我也看不懂 回去恶补基本功

使用特权

评论回复
11
cooldog123pp|  楼主 | 2018-9-12 20:29 | 只看该作者
wowu 发表于 2018-9-12 19:29
我也看不懂 回去恶补基本功

1楼大神是正解,我也学习了,大家一起学习,不懂的就发上来问一问,总归是有收获的。

使用特权

评论回复
12
knight_21ic| | 2018-9-12 22:31 | 只看该作者
这种技巧不学也罢

使用特权

评论回复
13
dingbo95| | 2018-9-12 22:36 | 只看该作者
就是为了清零而已

使用特权

评论回复
14
捉虫天师| | 2018-9-12 22:40 | 只看该作者
移位出去的就会被丢弃。所以低6位先被移出去了,丢弃了,再移动回来剩余的,让其他位置保持不变,低六位就是0了。

使用特权

评论回复
15
捉虫天师| | 2018-9-12 22:42 | 只看该作者
实现这个还有个方法,用位逻辑运算。不过前提你要知道这个变量是什么类型的。
如果不知道就要多运算一次,用0b111111取反后位与预算。

使用特权

评论回复
16
略略u| | 2018-9-12 23:42 | 只看该作者
什么意思呀,只是为了清零吗?

使用特权

评论回复
17
sdggg| | 2018-9-13 08:45 | 只看该作者
根本就不是为了清零,误人子弟,清零是&=~bitn,这种移位只是某种场合用到这种移法

使用特权

评论回复
18
pkuzhx| | 2018-9-13 09:20 | 只看该作者
sdggg 发表于 2018-9-13 08:45
根本就不是为了清零,误人子弟,清零是&=~bitn,这种移位只是某种场合用到这种移法 ...

源代码作者是不是为了清零谁也猜不透。但是这么写,最后的效果就是低6位清零。
而且从注释Round Accelerat Rate to Increment of 64来看,round to 64,原作者就是为了实现清零。

使用特权

评论回复
19
619888476| | 2018-9-13 09:23 | 只看该作者
这个可以

使用特权

评论回复
20
linqing171| | 2018-9-13 09:26 | 只看该作者
在ARM下,充分利用其CPU内部的桶形移位寄存器,两次移位把低6位清零。
而在8051下,用 and 0xC0只有一条指令,这个就会慢很多倍。

使用特权

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

本版积分规则

1839

主题

6418

帖子

30

粉丝