您的位置:首页 > 其它

不用判断语句比较两个数字大小

2014-07-12 00:15 351 查看
如题,网上有很多解决方案,在这里,罗列一下,留作后看。

1、平均值求法

//将取两个数的差的绝对值加上两个数,那么得到的就是大的那个数的两倍,这样除以二就得到了大的那个值

int getmax(int a, int b)
{
return (a + b + abs(a - b)) / 2;
}

//同样,减去两数的和减去两倍差的绝对值, 再除以二,就得到小的那个数:

int getmin(int a, int b)
{
return (a + b - abs(a - b) * 2) / 2;
}


2、移位法

//将两个数的差进行移位,向右移31位,如果得到的值为1,那么被减数大,反之减数大,当然得到大小值就有两种方法,一种是数组,一种是switch返回:
//为什么移31位,数字如果是负数,那么是以补码的形式存储的,右移之后得到的就是最高位的值,如果是1,那么说明这个差是负数,如果是0,那么这个差是正数
//以下是用数组
int getmax(int a, int b)
{
int buff[2] = { a, b };
unsigned int z = a - b;
z = z >> 31;
return buf[z];
}

int getmin(int a, int b)
{
int buff[2] = { a, b };
unsigned int z = a - b;
z = z >> 31;
return buf[abs(z - 1)];
}

//一下是用switch判断来返回(当然,如果允许用switch的话)
int getmax(int a, int b)
{
int buff[2] = { a, b };
unsigned int z = a - b;
z = z >> 31;
switch (z)
{
case 0:
return a;
break;
case 1:
return b;
break;
}
}


移位法得到结果也有好几种,将差和1进行&操作,也能得到一个结果。

细节处见真章啊!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐