Tips: 不使用if-else或者其他三目运算符等等一切判断语句。
————————我是分隔符——————————
#include <iostream>
using namespace std;
int my_max(int x,int y)
{
int test[2]={x,y};
unsigned int c;
c=x-y;
c>>=31;
return test[c];
}
int main()
{
int a=7,b=11;
cout<<my_max(a,b)<<endl;
return 0;
}
由于数字在计算机中以反码表示,所以如果c的值为负值则第32位为1,于是右移31位后得到c=1,同理若c值为正,则c=0。
方法二:绝对值法
#include <iostream>
#include<math.h>
using namespace std;
int my_min(int x,int y)
{
return ((x+y)+abs(x-y))/2;
}
int my_max(int x,int y)
{
return ((x+y)-abs(x-y))/2;
}
int main(){
int a=7,b=11;
cout<<my_min(a,b)<<endl;
cout<<my_max(a,b)<<endl;
return 0;
}