所以我有一个位序列:
1010
1 是最高有效位。
如果奇数位为 0,我的函数需要返回整数 0;如果奇数位为 1,则需要返回 1。
我不能使用任何 for 循环或任何类似性质的东西来查看是否需要返回 0 或 1。有没有人有任何建议如何解决这个问题。
我正在考虑使用 not 操作,但我可以弄清楚如何准确使用它。
到目前为止,我使用的是 1010...10 的序列,然后对其进行操作。对上面的代码执行此操作将得到 1010。现在我需要确定返回的是 1 还是 0。
假设我们正在讨论 32 位整数。我假设您想知道是否有任何奇数位被设置(1)。
为此,我们创建一个如下所示的整数:
10101010101010101010101010101010
现在,如果我们 AND (&
)这样,所有偶数位都被过滤掉。现在,如果该数字不为零,则设置一个或多个奇数位。在C中:
#include <stdint.h>
int hasodd(uint32_t x) {
// 0xAAAAAAAA = 10101010101010101010101010101010
// double negation to turn x>0 into 1 and leave 0 alone
return !!(x & 0xAAAAAAAA);
}
如果您的意思是应该返回是否设置了第 N 位,那么这是可行的。它右移一个1
到正确的位置以过滤掉所有不相关的位:
#include <stdint.h>
int nthbitset(uint32_t x, int n) {
return x & (1 << n);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)