屏蔽C中的位数范围

时间:2018-03-29 01:55:44

标签: c bit-manipulation bitwise-operators bit-shift

我试图在C中编写一个接受三个整数的方法:start,end和mask。如果mask为1,则除了开始到结束范围内的位之外的所有位都设置为0,并且范围中的位设置为1.此时此部分正在工作:

for (int i = 0; i < (end - start + 1); i++)
{
  if (mask == 1)
  {
    ret |= ret << 1;
    ret |= ret | 1;
  }
}...ret = ret << start;

(其中&#39; ret&#39;是无符号整数,如果掩码为1,则简单地开始为0;如果掩码为0,则简单地开始为0)。但是,我似乎无法弄清楚如何以另一种方式做到这一点:将一系列位掩码为0并将所有其余位设置为1.

1 个答案:

答案 0 :(得分:3)

由于将掩码从1翻转为0只是简单地反转结果,您可以忽略掩码,为mask == 1构建返回值,如果掩码为零则在末尾翻转它的位:

int ret = 0;
for (int i = start ; i <= end ; i++) {
    ret |= 1 << i;
}
if (!mask) {
    ret = ~ret;
}