如题,网上有很多解决方案,在这里,罗列一下,留作后看。
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进行&操作,也能得到一个结果。
细节处见真章啊!
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。