返回信息流一点修改建议
x * 2
可以(而且最好)写成 (x << 1))
另外不建议把变量声明放在 for () 的位置, 还是把 i 放到和 j 同一行中比较好
其它写得都不错. 分析一下算法, 加点注释吧, 这对别人会有帮助的
这是一条镜像帖。来源:北邮人论坛 / soft-design / #16103同步于 2007/3/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
Re: dodo给我出的题,位操作除法。。。
RemoteFish
2007/3/28镜像同步21 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
兄弟是搞硬件开发的。。。?
编译器会进行优化吧
【 在 RemoteFish (RemoteFish) 的大作中提到: 】
: 一点修改建议
: x * 2
: 可以(而且最好)写成 (x << 1))
: ...................
re,多数编译器会对此进行优化。
【 在 coolfantasy (Cool) 的大作中提到: 】
: 兄弟是搞硬件开发的。。。?
: 编译器会进行优化吧
【 在 coolfantasy 的大作中提到: 】
: 兄弟是搞硬件开发的。。。?
: 编译器会进行优化吧
呵呵, 这是一个习惯问题, 与其让编译器 '修改' 你的代码, 不如在写的时候就写成更好的样子, 这样在调试的时候也方便, 思考也直观
re.
【 在 RemoteFish (RemoteFish) 的大作中提到: 】
: 呵呵, 这是一个习惯问题, 与其让编译器 '修改' 你的代码, 不如在写的时候就写成更好的样子, 这样在调试的时候也方便, 思考也直观
不是位除法, 原谅那个脑瘫的表达能力吧
我给他出的题本来是 '用位操作及加减运算实现整除 13 的算法'. 这种东西在代码优化时是会有用的. 当然, 太复杂的转换反而会降低效率, 一般来说除法把 / 2^x 转换为 >> x 就好了, 位操作转换在乘法部分用得比较多
位操作在作协议解析及文件格式解析时非常有用, 脑瘫正在做一些图片格式处理的东东, 所以给他出此题, 帮他练练手
原来你是dodo,好形象啊
【 在 RemoteFish 的大作中提到: 】
: 不是位除法, 原谅那个脑瘫的表达能力吧
: 我给他出的题本来是 '用位操作及加减运算实现整除 13 的算法'. 这种东西在代码优化时是会有用的. 当然, 太复杂的转换反而会降低效率, 一般来说除法把 / 2^x 转换为 >> x 就好了, 位操作转换在乘法部分用得比较多
: 位操作在作协议解析及文件格式解析时非常有用, 脑瘫正在做一些图片格式处理的东东, 所以给他出此题, 帮他练练手
另外我帖 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