# I don't get how the following expression gets simplified

• 06-05-2009
Overworked_PhD
I don't get how the following expression gets simplified
I was told the following
Code:

if ( (a && b) || (!a && !b) )
was equivalent to

Code:

if(!!a == !!b)
Can someone explain to me how they arrive at this answer? I really don't see the steps involved.
• 06-05-2009
brewbuck
Quote:

Originally Posted by Overworked_PhD
I was told the following
Code:

if ( (a && b) || (!a && !b) )
was equivalent to

Code:

if(!!a == !!b)
Can someone explain to me how they arrive at this answer? I really don't see the steps involved.

The first expression evaluates to true if both a and b are true, or if neither a nor b are true. Since any non-zero value is true, then you cannot just condense this to "a == b". But if you double-negate, then a true value negates to zero, then negates to one, and then the comparison will work.

If only we had a logical XOR (as opposed to bitwise), we could say:

Code:

if( ! ( a ^^ b ) )
But alas we don't.
• 06-05-2009
Overworked_PhD
Okay. I get it.
• 06-05-2009
Sebastiani
It could be further simplified to either:

!a == !b

- or -

!( !a ^ !b )
• 06-05-2009
matsp
Quote:

Originally Posted by Sebastiani
It could be further simplified to either:

!a == !b

- or -

!( !a ^ !b )

The first one is going to be the faster of those two, I'm pretty sure.

--
Mats