我面临着基于输入参数生成位掩码的独特问题。例如,
如果param = 2,则掩码将为0x3(11b)如果param = 5,则掩码将为0x1F(1 1111b)
我使用C语言中的for循环实现了
int nMask = 0; for (int i = 0; i < param; i ++) { nMask |= (1 << i); }
我想知道是否有更好的算法~~~
关于这样的位掩码,要注意的一件事是它们总是比2的幂小1。
该表达式1 << n是获得2的n次方的最简单方法。
1 << n
您不希望Zero提供零的位掩码00000001,而是希望它提供零。因此,您需要减去一个。
00000001
mask = (1 << param) - 1;
编辑:
如果要为param> 32设置特殊情况:
int sizeInBits = sizeof(mask) * BITS_PER_BYTE; // BITS_PER_BYTE = 8; mask = (param >= sizeInBits ? -1 : (1 << param) - 1);
此方法适用于16、32或64位整数,但是您可能必须显式键入‘1’。