不用判断求两个int数据中的最大值

#include <stdafx.h>
#include <stdio.h>

typedef   int   T_NUM;

#define   SHIFTBITS   ( sizeof( T_NUM ) * 8 - 1 )

static   int   CheckFlag( T_NUM x, T_NUM y )
{
        int   s1 = (x >> SHIFTBITS)&1;
        int   s2 = (y >> SHIFTBITS)&1;
/*
 * if x have the same sign with y ,it will return 0 ( all +), or 3 ( all -).
 * if x + y - ,it will return 1;
 * if x - y + ,it will return 2;
 * */
        return ( s1 * 2 + s2 );
}

static   T_NUM   SameSign( int Flag, T_NUM x, T_NUM y )
{
        T_NUM   z = x - y;

        T_NUM   t[2] = { x, y };
        int   s = (z >> SHIFTBITS)&1;

        return t[s];
}

static   T_NUM   DiffSign( int Flag, T_NUM x, T_NUM y )
{
        T_NUM   t[2] = { x, y };

        return t[Flag - 1];
}

/*
 * static   (*T_NUM)( int, T_NUM, T_NUM )   FuncList[] = {
        SameSign, DiffSign, DiffSign, SameSign
};
*/
static T_NUM(*FuncList[])( int, T_NUM, T_NUM )= {
    SameSign, DiffSign, DiffSign, SameSign
};

T_NUM   Max( T_NUM x, T_NUM y )
{
        int   Flag = CheckFlag( x, y );
        return (*FuncList[Flag])( Flag, x, y );
}

int
main()
{
        printf( "Please Input two integer:\n" );
        T_NUM a, b;
        scanf( "%d", &a );
        scanf( "%d", &b );
        printf( "The bigger of the two is       %d\n", Max(a, b) );
        return( 0 );
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值