总结收集的以下几种算法设计:
第一种(跟要求有差别):
<pre name="code" class="cpp">#include<iostream>
using namespace std;
int max(int a,int b)
{
return (((a-b) & 0x80000000) ? b : a);
}
void main()
{
cout<<max(3,2)<<endl;
cout<<max(6,5)<<endl;
}
第二种:
int Max( int a, int b )
{
unsigned int flag = static_cast<unsigned int>(a - b);
flag = flag >> 31; //得到符号位,为0则a大,为1则b大
int array[] = {a, b}; //以flag为数组下标判断较大的数
return array[flag];
}
int main()
{
cout<<Max(3, 6)<<endl;
return 0;
}
第三种:
<pre name="code" class="cpp">#include<iostream>
#include <windows.h>
#include <cmath>
using namespace std;
int Max( int a, int b )
{
byte flag = a - b; //255
flag = flag >> 7; //得到符号位
int array[] = {a, b}; //以flag为数组下标判断较大的数
return array[flag];
}
int main()
{
cout<<Max(3, 6)<<endl;
return 0;
}
第四种:
int Max( int a, int b )
{
int c = (a + b + fabs(a-b)) / 2;
return c;
}
int main()
{
cout<<Max(3, 6)<<endl;
return 0;
}