int getMax(int a,int b){
int num[2]={a,b};
return num[((a>>31 ^ b>>31) & (a>>31 & 1)) | ( !(a>>31 ^ b>>31) & ((a-b)>>31 & 1)) ];
}
int getMin(int a,int b){
int num[2]={b,a};
return num[((a>>31 ^ b>>31) & (a>>31 & 1)) | ( !(a>>31 ^ b>>31) & ((a-b)>>31 & 1)) ];
}
void main()
{
int a=0x7FFFFFFF,b=0xFFFFFFF0;
cout<<getMax(a,b)<<endl;
cout<<getMax(b,a)<<endl;
cout<<getMin(a,b)<<endl;
cout<<getMin(b,a)<<endl;
a=0x7FFFFFFF,b=0xF;
cout<<getMax(a,b)<<endl;
cout<<getMax(b,a)<<endl;
cout<<getMin(a,b)<<endl;
cout<<getMin(b,a)<<endl;
a=0xFFFFFFF0,b=0xFFFFFF00;
cout<<getMax(a,b)<<endl;
cout<<getMax(b,a)<<endl;
cout<<getMin(a,b)<<endl;
cout<<getMin(b,a)<<endl;
a=0xFFFFFFF0,b=0x7FFFFFFF;
cout<<getMax(a,b)<<endl;
cout<<getMax(b,a)<<endl;
cout<<getMin(a,b)<<endl;
cout<<getMin(b,a)<<endl;
}
若a,b异号,即(a>>31 ^ b>>31)为1
则若a>>31 & 1为0,表示a为正,应该返回0,表示a大。若a>>31 & 1为1,表示a为负,应该返回1,表示b大。
若a,b同号,即(a>>31 ^ b>>31)为0
则(a-b)不会溢出,可以通过二者相减的符号位来判断ab大小。