【发布时间】:2021-05-29 23:42:19
【问题描述】:
我想知道是否有针对以下问题的有效算法实现:
给定一个无符号整数 U,制作一个掩码,选择设置的 U 的前 N 位。(从右到左,低位到高位)
例如:
f(U=1111, N=2) -> 0011
f(U=1010, N=2) -> 1010
f(U=1110, N=2) -> 0110
f(U=0111, N=2) -> 0011
f(U=0011, N=2) -> 0011
大多数处理器都有“查找第一个设置位”或类似指令,所以我认为在最坏的情况下我可以调用 N 次,但是否有可能做得更好?
【问题讨论】:
-
log(N) 可能。步骤更少,但更好?
-
明显问题:空间有限制吗?
标签: c algorithm bit-manipulation bitwise-operators mask