仅使用按位运算符复制 for 循环的功能
Replicating the function of a for loop using only bitwise operators
我正在尝试仅使用按位和某些运算符来复制循环的功能,包括 !
~
&
^
|
+
<<
>>
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 循环的情况下实现这样的输出。
您的代码测试所有奇数位,如果所有奇数位都已设置,则 returns 1。您可以使用此位掩码: ...0101 0101 0101
其中,32 位是 0xAAAAAAAA。
然后你把你的价值和按位计算出来。如果结果与您的掩码相同,则表示所有位都已设置。
int testOddBits(int x) {
return (x & 0xAAAAAAAA) == 0xAAAAAAAA;
}
也许这可以帮助:
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;
}
我正在尝试仅使用按位和某些运算符来复制循环的功能,包括 !
~
&
^
|
+
<<
>>
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 循环的情况下实现这样的输出。
您的代码测试所有奇数位,如果所有奇数位都已设置,则 returns 1。您可以使用此位掩码: ...0101 0101 0101 其中,32 位是 0xAAAAAAAA。 然后你把你的价值和按位计算出来。如果结果与您的掩码相同,则表示所有位都已设置。
int testOddBits(int x) {
return (x & 0xAAAAAAAA) == 0xAAAAAAAA;
}
也许这可以帮助:
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;
}