不使用判断语句及操作符,实现判断两个整型数的大小

这个题目主要使用位运算的知识来解答,曾经是一个公司的面试题。

代码如下:
#include
int main ()
{
    int a,b;
    int R[2]={'<','>'};
    int result;
    printf("Please input two number:");
    scanf("%d%d",&a,&b);
    result=(a-b)>>(sizeof(int)*8-1);
    printf("The result is:a %c b",R[result+1]);
    getch();
    return 0;
}

需要注意的如下:

  1. 实现原理:a-b,结果为正则a>b,为负则a<b,而整数在内存中存储的最高位为符号位,这样,左移整数在内存中所占位数-1,即可间接判断出结果。
  2. sizeof(int)*8的意思为int型整数所占内存空间的大小,单位是位,这样算增强了可移植性。
  3. 输出答案的方法,除了用判断可以输出不同的结果外,数组也可以实现相似功能。

留言