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