不知道我是否理解如何创建位功能

时间:2014-07-20 19:54:55

标签: c bits

如何创建一些函数,该函数将打开从参数1的位置开始并在参数2的位置结束的所有位,假设位数始终小于31且更大比/ 0到0?

我的理解:我假设它要我返回a和b中包含的位,然后关闭所有其他位。它会涉及一些声明:

(1 << a) and include all the bits all the way to (1 << b)?  

我对如何仅使用单个语句执行此操作感到有点困惑?

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式生成n位的掩码:

mask = (1U << n) - 1;

所以对你的情况来说,

int n = a - b + 1;
uint32_t mask = (1U << n) - 1;
uint32_t returnValue = mask << b;

如果a31b0n32为{{1}},则此算法会导致未定义的行为,这是不允许的) - 你可能想要特殊情况,如果它可以在你的程序中发生。