[英]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));
如果可以使用-
您可以这样做:
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.