如何创建一些函数,该函数将打开从参数1的位置开始并在参数2的位置结束的所有位,假设位数始终小于31且更大比/ 0到0?
我的理解:我假设它要我返回a和b中包含的位,然后关闭所有其他位。它会涉及一些声明:
(1 << a) and include all the bits all the way to (1 << b)?
我对如何仅使用单个语句执行此操作感到有点困惑?
答案 0 :(得分:2)
您可以通过以下方式生成n
位的掩码:
mask = (1U << n) - 1;
所以对你的情况来说,
int n = a - b + 1;
uint32_t mask = (1U << n) - 1;
uint32_t returnValue = mask << b;
如果a
为31
且b
为0
(n
为32
为{{1}},则此算法会导致未定义的行为,这是不允许的) - 你可能想要特殊情况,如果它可以在你的程序中发生。