#define bits ( sizeof( int ) * 8 - 1 )
static int CheckFlag( int x, int y )
{int s1 = x >> bits;
int s2 = y >> bits;
s1=abs(s1);
s2=abs(s2);
return ( s1 * 2 + s2 );
}
static int SameSign( int Flag, int x, int y )
{
int t[2] = { x, y };
long z = x - y;
int s = z >> (bits+32);
//上面两句,long类型是否需要,如果是32位机器的话,long与int有区别吗?为什么要用long呢?
//个人认为没有必要,因为调用此函数的初衷是在x,y同号的情况下调用,这个时候是不需要long类型的。
//故z>>(bits+32)这条语句,是否应该改为z>>bits呢??
s=abs(s);return t[s];
}
static int DiffSign(int Flag,int x,int y) 比较
{
int t[2] = { x, y };
return t[Flag - 1];
}
static int (*FuncList[4])(int Flag,int x,int y)={SameSign, DiffSign, DiffSign, SameSign};
static int Max( int x, int y ){
int Flag = CheckFlag( x, y );
return (*FuncList[Flag])(Flag,x,y);
}
推荐几个网址:
http://blog.163.com/weiqiao626@126/blog/static/12805522120101015113354185/
http://www.chinaunix.net/jh/23/422544.html