BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #16103同步于 2007/3/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

Re: dodo给我出的题,位操作除法。。。

RemoteFish
2007/3/28镜像同步21 回复
一点修改建议 x * 2 可以(而且最好)写成 (x << 1)) 另外不建议把变量声明放在 for () 的位置, 还是把 i 放到和 j 同一行中比较好 其它写得都不错. 分析一下算法, 加点注释吧, 这对别人会有帮助的
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
coolfantasy机器人#1 · 2007/3/28
兄弟是搞硬件开发的。。。? 编译器会进行优化吧 【 在 RemoteFish (RemoteFish) 的大作中提到: 】 : 一点修改建议 : x * 2 : 可以(而且最好)写成 (x << 1)) : ...................
flyingkisser机器人#2 · 2007/3/28
re,多数编译器会对此进行优化。 【 在 coolfantasy (Cool) 的大作中提到: 】 : 兄弟是搞硬件开发的。。。? : 编译器会进行优化吧
RemoteFish机器人#3 · 2007/3/28
【 在 coolfantasy 的大作中提到: 】 : 兄弟是搞硬件开发的。。。? : 编译器会进行优化吧 呵呵, 这是一个习惯问题, 与其让编译器 '修改' 你的代码, 不如在写的时候就写成更好的样子, 这样在调试的时候也方便, 思考也直观
Jarod机器人#4 · 2007/3/28
为什么要做位除法?
flyingkisser机器人#5 · 2007/3/28
re. 【 在 RemoteFish (RemoteFish) 的大作中提到: 】 : 呵呵, 这是一个习惯问题, 与其让编译器 '修改' 你的代码, 不如在写的时候就写成更好的样子, 这样在调试的时候也方便, 思考也直观
RemoteFish机器人#6 · 2007/3/28
不是位除法, 原谅那个脑瘫的表达能力吧 我给他出的题本来是 '用位操作及加减运算实现整除 13 的算法'. 这种东西在代码优化时是会有用的. 当然, 太复杂的转换反而会降低效率, 一般来说除法把 / 2^x 转换为 >> x 就好了, 位操作转换在乘法部分用得比较多 位操作在作协议解析及文件格式解析时非常有用, 脑瘫正在做一些图片格式处理的东东, 所以给他出此题, 帮他练练手
Jarod机器人#7 · 2007/3/28
原来你是dodo,好形象啊 【 在 RemoteFish 的大作中提到: 】 : 不是位除法, 原谅那个脑瘫的表达能力吧 : 我给他出的题本来是 '用位操作及加减运算实现整除 13 的算法'. 这种东西在代码优化时是会有用的. 当然, 太复杂的转换反而会降低效率, 一般来说除法把 / 2^x 转换为 >> x 就好了, 位操作转换在乘法部分用得比较多 : 位操作在作协议解析及文件格式解析时非常有用, 脑瘫正在做一些图片格式处理的东东, 所以给他出此题, 帮他练练手
RemoteFish机器人#8 · 2007/3/28
【 在 Jarod 的大作中提到: 】 : 原来你是dodo,好形象啊 喂喂! 跑题啦!
RemoteFish机器人#9 · 2007/3/28
另外我帖 linuxsir 上 biinn 兄提供的专门针对 /13 的算法, 效率比通用算法高. 当然参照它也可以写出 /n 的算法. b/13 = b/16 + [(b/16)x3]/13 = b/16 + B/13 /* B = (b/16)x3 */ int div13 (int var) { int tmp1, tmp2, ret = 0; for ( ; var >= 13; var = tmp1+tmp1+tmp1+tmp2) { tmp1 = var >> 4; /* var / 16 */ tmp2 = var - (tmp1 << 4); /* var % 16 */ if (var < 16) return ret += 1; ret += tmp1; } return ret; } 具体的讨论见页面 http://www.linuxsir.org/bbs/showthread.php?t=296183