繁体   English   中英

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

[英]setting bits at shifts using bitwise operators

我正在尝试复制功能

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次后设置了一位。

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

我相信我可以使用〜(〜x&〜y)复制or运算符x | y。

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

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

如果可以使用-您可以这样做:

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

检查y> x留给读者练习。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM