不用判断语句比较两个数的大小值

#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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值