随笔 - 8, 文章 - 0, 评论 - 17, 引用 - 0
数据加载中……

求两个数中最大值,不用判断语句。

 

#include "iostream.h" 
#include 
"math.h" 

#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);  
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);  

void main()  

int x,y,z; 
cout
<<"请输入整型x的值(-32768~32767):"
cin
>>x; 
cout
<<"请输入整型y的值(-32768~32767):"
cin
>>y; 
z
=Max(x,y); 
cout
<<"最大的数:"<<z<<endl; 
}  



#define bits ( sizeof( int ) * 8 - 1 ) //移动的位数
static int SameSign( int Flag, int x, int y ) //函数功能:x,y同号时的比较
static int DiffSign(int Flag,int x,int y) //函数功能:x,y异号时的比较
static int (*FuncList[4])(int Flag,int x,int y)={SameSign, DiffSign, DiffSign, SameSign}; //定义函数指针数组
static int Max( int x, int y ) //函数功能:求最大值

static int CheckFlag( int x, int y ) //函数功能:检测x,y的符号
/*
Flag 的值
+ +:0
- +;1
+ 1:2
- -:3
*/

posted on 2008-08-21 14:20 YG 阅读(3058) 评论(11)  编辑 收藏 引用 所属分类: C/C++ & 设计模型

评论

# re: 求两个数中最大值,不用判断语句。  回复  更多评论   

abs怎么实现?还不是用判断了

那直接(a+b+abs(a-b))/2不就得了?
2008-08-21 15:37 | Etrnls

# re: 求两个数中最大值,不用判断语句。  回复  更多评论   

楼上说得对,没意思
2008-08-21 16:13 | ghbxx2004

# re: 求两个数中最大值,不用判断语句。  回复  更多评论   

int max(int a, int b)
{
int diff = b - a;
return b - (diff & (diff >> 31));
}
2008-08-21 17:00 | fish_autumn

# re: 求两个数中最大值,不用判断语句。  回复  更多评论   

int max(int x,int y)
{
int buf[2]={x,y};
unsigned int z;

z=x-y;
z = z>>31;

return buf[z];
}
值得注意的是右移运算.对于有符号数,在右移时,符号位将随同移动.当为正数时,最高位补0,而为负数时,符号位为1.
x-y后如果是负数,则z>>31后,为1,buf[1]=y,否则同样分析,buf[0]=x
2008-08-21 17:18 |

# re: 求两个数中最大值,不用判断语句。  回复  更多评论   

感觉刚学编程的样子.
性价比低呀
2008-08-22 06:07 | 4h

# re: 求两个数中最大值,不用判断语句。  回复  更多评论   

有创意的哈,不过工程中不要有这种。
2008-08-22 09:12 | cexer

# re: 求两个数中最大值,不用判断语句。  回复  更多评论   

低手出的面试题吧?
2008-08-23 04:11 | 地方

# re: 求两个数中最大值,不用判断语句。  回复  更多评论   

用微操作来求两个数中最大值,的确很有趣。
2008-08-24 15:48 | 戴尔笔记本

# re: 求两个数中最大值,不用判断语句。[未登录]  回复  更多评论   

囧,俩int比较就是减了之后看符号位而已……何必呢
2008-08-25 10:12 | 陈梓瀚(vczh)

# re: 求两个数中最大值,不用判断语句。  回复  更多评论   

谢谢,各位的厚爱,这篇是以前再学校时期发过的帖子,
觉得很有趣所以就发出来,额外可以得到各路英雄的评价值得,哈哈。
2008-08-26 11:11 | YG

# re: 求两个数中最大值,不用判断语句。  回复  更多评论   

abs也不是非要用比较啊 :)
2008-09-12 00:38 | sdfasf

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理