仅使用按位运算符复制 for 循环的函数



我正在尝试仅使用按位和某些运算符(包括! ~ & ^ | + << >>

int loop(int x) {
   for (int i = 1; i < 32; i += 2)
     if ((x & (1 << i)) == 0)
       return 0;
   return 1; 
}

但是,我不确定如何仅使用这些运算符来复制循环的累积性质。我明白转移<< >>将允许我乘法和除法。然而,使用! ~ & ^ ~进行操作已被证明更加困难。有什么提示吗?

http://www.tutorialspoint.com/cprogramming/c_operators.htm

编辑:我了解如何实现位的添加,但不了解如何在不首先调用 while 或 for 循环的情况下实现这样的输出。

也许这会有所帮助:

int loop(int x) {
    x = x & 0xaaaaaaaa; // Set all even numbered bits in x to zero
    x = x ^ 0xaaaaaaaa; // If all odd numbered bits in x are 1, x becomes zero
    x = !x;             // The operation returns 1 if x is zero - otherwise 0
    return x;
}

您的代码测试所有奇数位,如果设置了所有奇数位,则返回 1。您可以使用此位掩码:...0101 0101 0101其中,对于 32 位是0xAAAAAAAA。然后你把你的值逐位地和它。如果结果与您的掩码相同,则表示已设置所有位。

int testOddBits(int x) {
    return (x & 0xAAAAAAAA) == 0xAAAAAAAA;
}

最新更新