Which is the simplest way to check if two integers have same sign? Is there any short bitwise trick to do this?
Assuming 32 bit ints:
bool same = ((x ^ y) >> 31) != 1;
Slightly more terse:
bool same = !((x ^ y) >> 31);
Thinking back to my university days, in most machine representations, isn't the left-most bit of a integer a 1 when the number is negative, and 0 when it's positive?
I imagine this is rather machine-dependent, though.
assuming 32 bit
if(((x^y) & 0x80000000) == 0)
... the answer if(x*y>0)
is bad due to overflow
(a ^ b) >= 0
will evaluate to 1 if the sign is the same, 0 otherwise.
int same_sign = !( (x >> 31) ^ (y >> 31) );
if ( same_sign ) ... else ...
What's wrong with
return ((x<0) == (y<0));
?