文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>最大值・最小值

最大值・最小值

时间:2006-04-23  来源:oliliango

    突然想到之前在cu上看到的一个主题,就是要求不用比较和判断,求最大值。当时看到强人们奇思妙想层出不穷呀,令我霎是佩服。
    结果今晚上想了,试了很久才算是搞定了一个。而且还利用了gcc的特性,真是没有面子。
    代码如下:

#define MAX_DIGITS sizeof(int)-1

int max(int a,int b)
{
    int c[2];
    c[0]=a;
    c[1]=b;
    int flag1=0-((a-b)>>MAX_DIGITS);
    int flag2=0-((b-a)>>MAX_DIGITS);
    int flag3=0-(a>>MAX_DIGITS);
    int flag=(flag1&&(!flag2))||(flag1&&flag2&&flag3);
    return c[flag];
}

    基本上解决了边界溢出的问题,但是方式很不好。

    我想如果是c++的话,可以用模板函数解决。

    其实就是一时想起来了,完全是很无聊的。功能的话,一句就搞定了:
    #define MAX(a,b) a>b?a:b
   
    现在只能想到这里了,请尽情来拍板砖吧。

20070721增加:
    今天把内核里面的实现拷到这里作为对比:
   
#define min(x,y) ({ \
        typeof(x) _x = (x);     \
        typeof(y) _y = (y);     \
        (void) (&_x == &_y);            \
        _x < _y ? _x : _y; })

#define max(x,y) ({ \
        typeof(x) _x = (x);     \
        typeof(y) _y = (y);     \
        (void) (&_x == &_y);            \
        _x > _y ? _x : _y; })

    enjoy it.
相关阅读 更多 +
排行榜 更多 +
终极街头格斗

终极街头格斗

休闲益智 下载
大炮轰飞机

大炮轰飞机

飞行射击 下载
像素打僵尸

像素打僵尸

飞行射击 下载