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

[复制链接]
2299|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 | 显示全部楼层
我也不理解这句话的意思
renzheshengui 发表于 2018-9-11 19:23 | 显示全部楼层
是不是有那个什么逻辑啥的
huzi2099 发表于 2018-9-12 08:22 | 显示全部楼层
 楼主| cooldog123pp 发表于 2018-9-12 11:03 | 显示全部楼层

好的了解了,多谢,学习了,这种小技巧,确实书上是没有的。
八层楼 发表于 2018-9-12 12:32 | 显示全部楼层
百度上是不是可以搜索到
观海 发表于 2018-9-12 12:35 | 显示全部楼层
按理说可以
wowu 发表于 2018-9-12 19:29 | 显示全部楼层
我也看不懂 回去恶补基本功
 楼主| cooldog123pp 发表于 2018-9-12 20:29 | 显示全部楼层
wowu 发表于 2018-9-12 19:29
我也看不懂 回去恶补基本功

1楼大神是正解,我也学习了,大家一起学习,不懂的就发上来问一问,总归是有收获的。
knight_21ic 发表于 2018-9-12 22:31 | 显示全部楼层
这种技巧不学也罢
dingbo95 发表于 2018-9-12 22:36 | 显示全部楼层
就是为了清零而已
捉虫天师 发表于 2018-9-12 22:40 | 显示全部楼层
移位出去的就会被丢弃。所以低6位先被移出去了,丢弃了,再移动回来剩余的,让其他位置保持不变,低六位就是0了。
捉虫天师 发表于 2018-9-12 22:42 | 显示全部楼层
实现这个还有个方法,用位逻辑运算。不过前提你要知道这个变量是什么类型的。
如果不知道就要多运算一次,用0b111111取反后位与预算。
略略u 发表于 2018-9-12 23:42 来自手机 | 显示全部楼层
什么意思呀,只是为了清零吗?
sdggg 发表于 2018-9-13 08:45 来自手机 | 显示全部楼层
根本就不是为了清零,误人子弟,清零是&=~bitn,这种移位只是某种场合用到这种移法
pkuzhx 发表于 2018-9-13 09:20 | 显示全部楼层
sdggg 发表于 2018-9-13 08:45
根本就不是为了清零,误人子弟,清零是&=~bitn,这种移位只是某种场合用到这种移法 ...

源代码作者是不是为了清零谁也猜不透。但是这么写,最后的效果就是低6位清零。
而且从注释Round Accelerat Rate to Increment of 64来看,round to 64,原作者就是为了实现清零。
619888476 发表于 2018-9-13 09:23 | 显示全部楼层
这个可以
linqing171 发表于 2018-9-13 09:26 | 显示全部楼层
在ARM下,充分利用其CPU内部的桶形移位寄存器,两次移位把低6位清零。
而在8051下,用 and 0xC0只有一条指令,这个就会慢很多倍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2304

主题

7631

帖子

31

粉丝
快速回复 在线客服 返回列表 返回顶部