使用按位运算符的条件语句
所以我看到这个问题已经被提出,但答案有点模糊,无益。 好的,我只需要使用“&^〜!+ | >> <<”来实现ac表达式
表达式需要类似:a? b:c
所以,从我能够讲述的,表达式需要看起来像:
return (a & b) | (~a & c)
当a = 0时,这是有效的,因为用b进行和将得到零,然后或表达式将返回右侧, (~a & c)
,因为~0给出所有1,并且使用所有1返回c返回c 。
但是,当a> 0时,这不起作用。有人可以尝试解释为什么会这样,或者如何解决它?
我会使用!!a
将a
转换为布尔值,得到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
。