Mathematically Find Max Value without Conditional Comparison

前端 未结 14 587
暗喜
暗喜 2020-12-03 03:39

----------Updated ------------

codymanix and moonshadow have been a big help thus far. I was able to solve my problem using the equations and instead of using right

14条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-03 04:02

    //Assuming 32 bit integers 
    int is_diff_positive(int num)
    {
        ((num & 0x80000000) >> 31) ^ 1; // if diff positive ret 1 else 0
    }
    int sign(int x)
    {
       return ((num & 0x80000000) >> 31);
    }
    
    int flip(int x)
    {
       return x ^ 1;
    }
    
    int max(int a, int b)
    {
      int diff = a - b;
    
      int is_pos_a = sign(a);
      int is_pos_b = sign(b);
    
      int is_diff_positive = diff_positive(diff);
      int is_diff_neg = flip(is_diff_positive);
    
      // diff (a - b) will overflow / underflow if signs are opposite
      // ex: a = INT_MAX , b = -3 then a - b => INT_MAX - (-3) => INT_MAX + 3
      int can_overflow = is_pos_a ^ is_pos_b;
      int cannot_overflow = flip(can_overflow);
      int res = (cannot_overflow * ( (a * is_diff_positive) + (b * 
                is_diff_negative)) + (can_overflow * ( (a * is_pos_a) + (b * 
                is_pos_b)));
    
      return res;
    
    }
    

提交回复
热议问题