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

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

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

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

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

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

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

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

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

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

换句话说,如果a为false (即0),则需要a将所有位设置为0,如果a为真(即a > 0 ),则需要将所有位设置为1。

对于前一种情况,已经为您完成了工作; 对于后者 – 尝试找出表达式的结果~!1