我面临着一个独特的问题:根据输入参数生成位掩码.例如
如果param=2,则掩码将为0x3(11b)
这是我使用C语言中的for循环实现的,类似于
int nMask = 0;
for (int i = 0; i < param; i ++) {
nMask |= (1 << i);
}
我想知道是否有更好的算法~~~
我面临着一个独特的问题:根据输入参数生成位掩码.例如
如果param=2,则掩码将为0x3(11b)
这是我使用C语言中的for循环实现的,类似于
int nMask = 0;
for (int i = 0; i < param; i ++) {
nMask |= (1 << i);
}
我想知道是否有更好的算法~~~
这样的位掩码需要注意的一点是,它们总是比2的幂小1.
表达式1 << n
是获得2的n次方的最简单方法.
您不希望Zero提供位掩码00000001
,您希望它提供零.所以你需要减go 一.
mask = (1 << param) - 1;
Edit:
If you want a special case for param > 32:
int sizeInBits = sizeof(mask) * BITS_PER_BYTE; // BITS_PER_BYTE = 8;
mask = (param >= sizeInBits ? -1 : (1 << param) - 1);
此方法应适用于16、32或64位整数,但可能必须显式键入"1".