在没有条件语句的情况下访问第n位

Dav*_*vid 3 c bitwise-operators truthtable

所以我有一点顺序:

1010

1是MSB.

如果奇数位为0,我的函数需要返回0的整数,如果是1则返回1.

我不能使用任何for循环或任何性质的东西来看我是否需要返回0或1.有没有人有任何建议如何去做.

我正在考虑使用not操作,但我可以弄清楚如何使用它.

到目前为止,我正在使用1010 ... 10的序列,然后将它连接起来.这样做会让我得到1010.现在我需要知道我是否返回1或0.

orl*_*rlp 8

假设我们在讨论32位整数.我假设您想知道任何ODD位是否为SET(1).

为此,我们创建一个如下所示的整数:

10101010101010101010101010101010
Run Code Online (Sandbox Code Playgroud)

现在,如果我们通过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); 
}
Run Code Online (Sandbox Code Playgroud)

如果你的意思是你应该返回是否设置了第N位,这是有效的.它右1移到正确的位置以过滤掉所有不相关的位:

#include <stdint.h>

int nthbitset(uint32_t x, int n) {
    return x & (1 << n);
}
Run Code Online (Sandbox Code Playgroud)