atb*_*atb 11 c conditional bit-manipulation bitwise-operators
所以我看到这个问题已经被提出,但答案有点模糊,无益.好的,我只需要使用"&^〜!+ | >> <<"来实现ac表达式
表达式需要类似:a?b:c
所以,从我能够讲述的,表达式需要看起来像:
return (a & b) | (~a & c)
当a = 0时,这是有效的,因为用b表示它将给出零,然后或表达式将返回右侧,(~a & c)这是有效的,因为~0给出了所有1,并且所有1的和c都返回c.
但是,当a> 0时,这不起作用.有人可以尝试解释为什么会这样,或者如何解决它?
Jer*_*fin 17
我会转换a为布尔值使用!!a,得到0或1 x = !!a.
然后我会用两个补语来否定它.由于你没有一元减号可用,你使用2的补码否定的定义:反转位,然后加一:y = ~x + 1.这将使所有位清零或设置所有位.
然后我and直接用一个变量y & b,它与另一个变量相反:~y & c.这将为其中一个表达式赋予0,为另一个表达式赋予原始变量.当我们or在一起时,零将没有效果,所以我们将获得原始变量,不变.