不用判断语句比较两个数字大小
2014-07-12 00:15
351 查看
如题,网上有很多解决方案,在这里,罗列一下,留作后看。
1、平均值求法
2、移位法
移位法得到结果也有好几种,将差和1进行&操作,也能得到一个结果。
细节处见真章啊!
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进行&操作,也能得到一个结果。
细节处见真章啊!
相关文章推荐
- 定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句 以及 不用 第三个数,交换 a,b的值
- 用Groovy实现判断两个int数值大小(不用比较运算符,考虑溢出)
- 有两个变量a和b,不用“if”、“? :”、“switch”或其他判断语句,找出两个数中比较大的
- 不用判断语句比较两个数的大小值
- 两个变量a,b,不用判断语句,找出两个中比较大的那个变量
- 比较两个数a、b的大小,不能使用大于/小于、if、switch,?:等判断语句
- 两个变量a,b,不用“if”,“? :”,switch或者其它判断语句,找出两个数中间比较大的
- 有两个变量a 和 b,不用if、?: 、switch 或者其他判断语句,找出两个数中比较大的那个
- 有两个变量a 和 b,不用if、?: 、switch 或者其他判断语句,找出两个数中比较大的那个
- 不用判断语句比较两个数的大小值
- 定义一个宏,不用if switch > < 等任何判断语句 比较a和b的大小
- 不用判断语句实现两个整数的比较
- 比较两个数a、b的大小,不能使用大于/小于、if、switch,?:等判断语句
- 08-14 比较两个数的大小,不用判断语句
- 两个变量a,b,不用判断语句,找出两个中比较大的那个变量
- 不用if else 等判断语句判断两个数值的大小
- linux下从命令行下读入两个数字,并比较大小
- Jquery JS 正确的比较两个数字大小的方法
- 请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
- 一个宏比较两个数的大小(不用>,if语句)