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

所以我有一点顺序:

1010

1是MSB。

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

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

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

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

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

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

 10101010101010101010101010101010 

现在,如果我们和( & )这样,所有偶数位都被过滤掉了。 现在,如果该数字不为零,则设置一个或多个奇数位。 在C:

 #include  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  int nthbitset(uint32_t x, int n) { return x & (1 << n); } 

我对你的问题的意图很模糊 – 看起来像是家庭作业。 根据您的实际需求(如问题标题或文本中所述),其中一个适用于大多数C实现:

 int hasoddbitset (int v) { return (v & 0xaaaaaaaa) != 0; // for 32 bit ints } int isbitset (int val, int bitnum) { return (val & (1 << bitnum)) != 0; }