package com.interview.books.ccinterview; /** * Created_By: stefanie * Date: 14-12-13 * Time: 下午11:00 */ public class CC25_MaxWithComparison { //if a and b have different sign, a - b may cause overflow. public static int getMax(int a, int b){ int sa = sign(a); int sb = sign(b); int sc = sign(a - b); int diff = sa ^ sb; //if sa != sb, diff == 1 int same = (sa ^ sb) ^ 1; //if sa == sb, same == 1 //if a and b have different sign, k = sign(a), if a and b have same sign, k = sign(a-b). int k = diff * sa + same * sc; int q = k ^ 1; return a * k + b * q; } //return 1 for positive, and 0 for negative public static int sign(int a){ return ((a >> 31) & 1) ^ 1; } }