So I see that this question has already been asked, however the answers were a little vague and unhelpful. Okay, I need to implement a c expression using only \"& ^ ~ ! + |
I would convert a
to a boolean using !!a
, to get 0 or 1. x = !!a
.
Then I'd negate that in two's complement. Since you don't have unary minus available, you use the definition of 2's complement negation: invert the bits, then add one: y = ~x + 1
. That will give either all bits clear, or all bits set.
Then I'd and
that directly with one variable y & b
, its inverse with the other: ~y & c
. That will give a 0 for one of the expressions, and the original variable for the other. When we or
those together, the zero will have no effect, so we'll get the original variable, unchanged.
In other words, you need a
to have all bits set to 0, if a is false
(i.e. 0), and have all bits set to 1, if a
is true (i.e. a > 0
).
For the former case, the work is already done for you; for the latter -- try to work out result of the expression ~!1
.