没有条件运算符的最大数

时间:2010-12-20 05:21:48

标签: c

任何人都可以详细说明如何在不使用条件运算符的情况下找到最大的四个数字。对于我已经完成的3个数字,但是对于四个数字,如何编写不同的比较。

3 个答案:

答案 0 :(得分:1)

void main()
{
  int a, b;
  printf("Enter a and b:");
  scanf("%d %d", &a, &b);
  printf("Maximum number is %d", max(a, b));
  getch();
}
int max(int a, int b)
{
  int c, temp;
  c = a - b;
  temp = c + abs(c);
  // To check if the difference is negative or not
  if(temp) //As suggested by R..
    return b;
  else
    return a;
}

此代码用于比较两个数字。对所有数字进行比较。

答案 1 :(得分:1)

有一种标准的方法可以在不使用条件的情况下计算2的补码算术中的minmax

int max(int a, int b){
    unsigned diff = b - a;  // negative if a > b
    int sign = -(diff >> (sizeof(int) * CHAR_BIT - 1)); // -1 if a > b, 0 otherwise
    return (a & sign) | (b & ~sign);
}

它可以很容易地缩放。

答案 2 :(得分:1)

你可以通过使用以下技巧找到最多两个数字a,b:

  

(ABS(A + B)+ ABS(A-B))/ 2

扩展你想要的数量的技巧。