如題,網上有很多解決方案,在這里,羅列一下,留作后看。
1、平均值求法
1 //將取兩個數的差的絕對值加上兩個數,那么得到的就是大的那個數的兩倍,這樣除以二就得到了大的那個值 2 3 int getmax(int a, int b) 4 { 5 return (a + b + abs(a - b)) / 2; 6 } 7 8 //同樣,減去兩數的和減去兩倍差的絕對值, 再除以二,就得到小的那個數: 9 10 int getmin(int a, int b) 11 { 12 return (a + b - abs(a - b) * 2) / 2; 13 }
2、移位法
1 //將兩個數的差進行移位,向右移31位,如果得到的值為1,那么被減數大,反之減數大,當然得到大小值就有兩種方法,一種是數組,一種是switch返回: 2 //為什么移31位,數字如果是負數,那么是以補碼的形式存儲的,右移之后得到的就是最高位的值,如果是1,那么說明這個差是負數,如果是0,那么這個差是正數 3 //以下是用數組 4 int getmax(int a, int b) 5 { 6 int buff[2] = { a, b }; 7 unsigned int z = a - b; 8 z = z >> 31; 9 return buf[z]; 10 } 11 12 int getmin(int a, int b) 13 { 14 int buff[2] = { a, b }; 15 unsigned int z = a - b; 16 z = z >> 31; 17 return buf[abs(z - 1)]; 18 } 19 20 21 //一下是用switch判斷來返回(當然,如果允許用switch的話) 22 int getmax(int a, int b) 23 { 24 int buff[2] = { a, b }; 25 unsigned int z = a - b; 26 z = z >> 31; 27 switch (z) 28 { 29 case 0: 30 return a; 31 break; 32 case 1: 33 return b; 34 break; 35 } 36 }
移位法得到結果也有好幾種,將差和1進行&操作,也能得到一個結果。
細節處見真章啊!