找回密码
 欢迎注册
楼主: gxqcn

[擂台] 求bit位为1数目不超出2的正整数

[复制链接]
 楼主| 发表于 2009-2-3 09:16:31 | 显示全部楼层
原帖由 无心人 于 2009-2-3 09:02 发表 那这么描述可以么? 如果n本身满足最多2个bit是1,则是n 否则返回比n大的最小的2^k
还不确切。 正确的为: 如果n本身满足最多2个bit是1,则是n 否则返回 $2^k+2^(h+1)$,其中 $k,h$ 分别为 n 的bit=1的最高位及次高位。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-3 09:20:44 | 显示全部楼层
mov eax, n mov edi, eax cmp eax, 6 jbe exit bsr ecx, eax mov edx, 1 shl edx, cl mov ebx, edx xor eax, edx bsr ecx, eax jz l1 mov edx, 1 shl edx, cl xor eax, edx jz l1 shl edx, 1 add ebx, edx mov eax, ebx jmp exit l1: mov eax, edi exit:
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-3 09:22:25 | 显示全部楼层
=================================================== 呵呵该死的chrome, 让我看不到你们的式子的真实样子 确实是11#的样子
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-3 09:37:00 | 显示全部楼层
12#应该差不多了吧
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-3 09:44:32 | 显示全部楼层
化简1 mov ebx, n cmp ebx, 6 jbe l1 bsr ecx, ebx mov edx, 1 shl edx, cl mov eax, edx xor ebx, edx bsr ecx, ebx jz l1 mov edx, 1 shl edx, cl xor ebx, edx jz l1 shl edx, 1 add eax, edx jmp exit l1: mov eax, n exit:
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-3 09:50:49 | 显示全部楼层
化简2 mov ebx, n cmp ebx, 6 jbe l1 bsr ecx, ebx mov edx, 1 shl edx, cl mov eax, edx xor ebx, edx bsr ecx, ebx jz l1 mov edx, 1 shl edx, cl xor ebx, edx jz l1 lea, eax, [eax + 2 * edx] jmp exit l1: mov eax, n exit:
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-3 09:57:30 | 显示全部楼层
再次化简就要Cache数组了 假设power[8] = {1, 2, 4, 8, 16, 32, 64, 128} 化简3 mov ebx, n cmp ebx, 6 jbe l1 bsr ecx, ebx mov eax, dword ptr power[ecx] xor ebx, eax bsr ecx, ebx jz l1 mov edx, dword ptr power[ecx] xor ebx, edx jz l1 lea, eax, [eax + 2 * edx] jmp exit l1: mov eax, n exit:
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-3 10:02:50 | 显示全部楼层
下面就很难再化简了 已经低于32个时钟周期执行时间了 有谁测试下是否正确?? ============================ bsr很难被更好的指令组代替,其执行时间不固定
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-3 10:11:31 | 显示全部楼层
用C描述就是二分查找 预先把所有可能的结果增序排列 然后对输入n在序列中找 k <= n < m 的相邻的k, m 然后输出k
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-2-3 12:06:22 | 显示全部楼层
jzf 是什么指令,我这里编译不过。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-12-23 23:27 , Processed in 0.025262 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表