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

时间:2011-03-26 05:20:06

标签: c bit-manipulation bitmask

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

示例:

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

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

任何参赛者?

1 个答案:

答案 0 :(得分:9)

应该这样做:(1 << n) - 1