我试图在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.
答案 0 :(得分:3)
由于将掩码从1翻转为0只是简单地反转结果,您可以忽略掩码,为mask == 1
构建返回值,如果掩码为零则在末尾翻转它的位:
int ret = 0;
for (int i = start ; i <= end ; i++) {
ret |= 1 << i;
}
if (!mask) {
ret = ~ret;
}