使用按位运算符设置移位位

时间:2016-07-19 03:07:39

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

我试图复制功能

int test(int x, int y)
 {
   int result = 0;
   int i;
   for (i = y; i <= x; i++)
   result |= 1 << i;
   return result;
  }

取两个整数并为两个数字之间的每个位置设置一个位。假设0 <= x <= 31,并且0 <= y <= 31.例如(7,5)将设置1到1110 0000,其中在移位5,6和7次之后设置比特。

我试图做同样的事情,但仅限于使用某些按位运算符(〜&amp; +&lt;&lt;&lt;&lt;&lt;&lt;&lt;但是我很难找到一种不使用循环的方法。如果y> 1,则该函数应返回0。 X

我相信我可以使用〜(~x&amp; ~y)来复制或运算符x | y。

和x ^ y使用〜(〜(~x&amp; y)&amp;〜(x&amp; ~y));

http://www.tutorialspoint.com/cprogramming/c_operators.htm

1 个答案:

答案 0 :(得分:0)

如果你可以使用-,你可以这样做:

int test(int x, int y)
{
    int mask1 = (1 << y) - 1;
    int mask2 = (1 << (x+1)) - 1;
    int result = mask1 ^ mask2;
    return result;
}

检查y&gt; x留给读者练习。