### Question

Write a method which finds the maximum of two numbers. You should not use if-else or any other comparison operator.

EXAMPLE

Input: 5, 10

Output: 10

This is also on **CC150v5 Q17.4**.

### Solution

We can’t use >, < or if-else statement, but we can use mathematical operator like subtract and bit operators.

Calculate (a-b) and do (a + K(a-b)) can help us (where K is either 0 or -1).

**Updated on Sep 29th**: according to CC150v5 Q17.4, there can be errros when **(a-b) is overflows**. So this is the modified version of solution:

- do a sign check of a and b
- if a and b are same sign, do it just like before
- if a and b are different sign, the ‘K’ value only depends on a.

I posted the modified solution below as well.

### Code

**first solution from v4**, written by me:

```
public static int getMax(int a, int b) {
int c = a - b;
int signBit = c >> 31 & 1;
// if (a-b) is negative, sign = 1
// otherwise, sign = 0
return a - signBit * c;
}
```

**modified solution**, no overflow issues.

```
public static int getMax(int a, int b) {
int sign;
// if a,b have different sign, then go with first number
if (sign(a) == sign(b)) {
sign = sign(a - b);
} else {
sign = sign(a);
}
// sign is 0 if a >= b
// sign is -1 is a < b
return a + (a - b) * sign;
}
private static int sign(int c) {
return c >> 31;
}
```