I was told the following

was equivalent toCode:`if ( (a && b) || (!a && !b) )`

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

Printable View

- 06-05-2009Overworked_PhDI don't get how the following expression gets simplified
I was told the following

Code:`if ( (a && b) || (!a && !b) )`

Code:`if(!!a == !!b)`

- 06-05-2009brewbuck
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 ) )`

- 06-05-2009Overworked_PhD
Okay. I get it.

- 06-05-2009Sebastiani
It could be further simplified to either:

!a == !b

- or -

!( !a ^ !b ) - 06-05-2009matsp