为给定输入生成以下位掩码的最佳方法?

发布于 2024-10-26 22:51:32 字数 419 浏览 1 评论 0原文

我试图找出生成以下位掩码的最佳方法: - 对于给定的输入 n,输出将是一个位掩码,其中设置了前 (n-1) 位,并且未设置所有其他位。

示例:

if n = 1, output = 0x00000001 = 00000000000000000000000000000001
if n = 2, output = 0x00000003 = 00000000000000000000000000000011
if n = 3, output = 0x00000007 = 00000000000000000000000000000111

我知道明显的迭代方式(一次设置一位),这将花费 O(n) 时间......我只是想知道是否有任何“位魔法”可以在常数中做到这一点时间,或者至少是亚线性时间(不使用 LUT!!)

有人接受吗?

I'm trying to find out the best way to generate the following bitmask : - For a given input n, the output would be a bitmask which has the first (n-1) bits set, and all other bits unset.

Example:

if n = 1, output = 0x00000001 = 00000000000000000000000000000001
if n = 2, output = 0x00000003 = 00000000000000000000000000000011
if n = 3, output = 0x00000007 = 00000000000000000000000000000111

I know of the obvious iterative way(setting the bits one at a time), that would take O(n) time....I'm just wondering if there's any "bit-magic" that can do this in constant time, or at least sub-linear time (without using LUT !!)

Any takers ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

捎一片雪花 2024-11-02 22:51:32

这应该可以做到:(1 << n) - 1

This should do it: (1 << n) - 1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文