- 论坛徽章:
- 0
|
不用判断语句,求两个数的最大值
- typedef int T_NUM;
- #define SHIFTBITS ( sizeof( T_NUM ) * 8 - 1 )
- static int CheckFlag( T_NUM x, T_NUM y )
- {
- int s1 = x >;>; SHIFTBITS;
- int s2 = y >;>; SHIFTBITS;
- 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;
- 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
- };
- T_NUM Max( T_NUM x, T_NUM y )
- {
- int Flag = CheckFlag( x, y );
- return (*FuncList[Flag])( Flag, x, y );
- }
复制代码 |
|