【发布时间】:2016-07-18 09:58:01
【问题描述】:
我正在尝试仅使用按位和某些运算符复制循环的功能,包括 ! ~ & ^ | + << >>
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 循环的情况下实现这样的输出。
【问题讨论】:
-
首先考虑函数实际在做什么 - 它正在测试所有奇数位以查看它们是否全为 1。那么您将如何使用位运算符在单个操作中做到这一点? (想想面具。)
-
这个问题是怎么重复的?
-
@Silverfin:你的逻辑有点不对劲——你可能想使用所有奇数位的掩码 (
0xaaaaaaaa),因为这些是你感兴趣的位。那么函数就是return (n & mask) == mask;(你不需要if)。如果您不能使用==,那么请考虑如何通过进一步的按位运算来实现它。 -
是的,这看起来很有希望,假设您被允许使用逻辑非运算符 (
!)。 -
@PaulR 我可以,我对事情有了更好的把握。谢谢你。
标签: c++ c for-loop bit-manipulation bitwise-operators