使用按位运算符的条件语句

时间:2012-04-05 19:03:44

标签: c conditional bit-manipulation bitwise-operators

所以我看到这个问题已经被提出,但答案有点模糊,无益。好的,我只需要使用“& ^〜!+ |>><<”

来实现c表达式

表达式需要类似:a? b:c

所以,从我能够说的,表达式需要看起来像:

return (a & b) | (~a & c)

当a = 0时,这是有效的,因为用b和它将得到零,然后或表达式将返回右侧,(~a & c)这是有效的,因为~0给出了所有的,并且和c一起使用了所有的返回c。

然而,当>时,这不起作用。有人可以尝试解释这是为什么,或者如何解决它?

2 个答案:

答案 0 :(得分:16)

我会使用a!!a转换为布尔值,以获得0或1. x = !!a

然后我在两个补语中否定它。由于您没有一元减号可用,因此使用2的补码否定的定义:反转位,然后添加一个:y = ~x + 1。这将使所有位清零或设置所有位。

然后我and直接使用一个变量y & b,它与另一个变量~y & c相反。这将为其中一个表达式赋予0,为另一个表达式赋予原始变量。当我们or在一起时,零将没有效果,所以我们将得到原始变量,不变。

答案 1 :(得分:3)

换句话说,如果a为a(即0),则需要false将所有位设置为0,并且如果aa > 0,则将所有位设置为1是的(即~!1)。

对于前一种情况,已经完成了工作;对于后者 - 尝试计算表达式{{1}}的结果。