gpt4 book ai didi

c++ - 使用按位运算符设置移位位

转载 作者:行者123 更新时间:2023-11-30 16:59:00 25 4
gpt4 key购买 nike

我正在尝试复制该功能

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) 复制或运算符 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 留给读者作为练习。

关于c++ - 使用按位运算符设置移位位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38448945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com