比較兩個數的大小,交換兩個數的 方法總結
阿新 • • 發佈:2019-01-11
面試寶典中看到的,記錄下來,與大家共勉
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;