1. 程式人生 > >比較兩個數的大小,交換兩個數的 方法總結

比較兩個數的大小,交換兩個數的 方法總結

面試寶典中看到的,記錄下來,與大家共勉

1、比較兩個數的大小

/*比較兩個數的大小,不要使用if判斷*/
#include <stdio.h>
#include <math.h>

int main()
{
    int a, b;
    printf("please input a and b:\n");
    scanf("%d%d",&a,&b);

    //方法1
    int max = ((a + b) + abs(a - b))/2;
    printf("the max between %d and %d is:%d\n", a, b, max);

    //方法2
    int c = a - b;
    char *str[2] = {"larger a", "larger b"};
    c = (unsigned)c >> (sizeof(int) * 8 - 1);//c的取值為0或者1,c=0說明a>b,c=1說明a<b。
    printf("%s\n",str[c]);

    return 0;
}

分析:方法1很好理解,在此不再詳述。

方法2,首先對a,b作差,那麼c可能為正數也可能為負數。對於負數將c用二進位制表示最高位為1,無論c的補碼形式是怎樣的,它的最高位是1是一定的,那麼對於整型數,右移31位(因為int型別在記憶體中佔32位),最後使得c=1。對於c是正數的情況類似,最後c=0

2、交換兩個數

定義 int a,b

方法1:藉助變數

temp = a;

a =b;

b = temp;

方法2:藉助算術運算

a = a + b;

b = a - b;

a = a - b;

方法3:藉助位運算

a = a ^ b;

b = a ^ b;

a = a ^ b;