求大神解决下这么写的max和min函数,该怎么处理

求大神解决下这么写的max和min函数
int max(int a,int b)
{
return *( &a+(unsigned(a-b)>>(sizeof(int)*8-1)) );
}

int min(int a,int b)
{
return *( &b-(unsigned(a-b)>>(sizeof(int)*8-1)) );
}

------解决方案--------------------
int max(int a,int b)
{
return *( &a+(unsigned(a-b)>>(sizeof(int)*8-1)) );
}

这个是很讨巧的方法,直接返回前一个地址的值还是后一个地址的值,也就是说,如果a>b,那么就会返回a地址对应的值
------解决方案--------------------
探讨
引用:

int max(int a,int b)
{
return *( &a+(unsigned(a-b)>>(sizeof(int)*8-1)) );
}

这个是很讨巧的方法,直接返回前一个地址的值还是后一个地址的值,也就是说,如果a>b,那么就会返回a地址对应的值
能说的更详细些吗?谢谢

------解决方案--------------------
1.unsigned(a-b)>>(sizeof(int)*8-1) 等价为 a>=b?0:-1
2.函数入栈顺序为从右往左 b=*(&a-1)
3.不同的编译器可能第二条处理不同 所以。。
不推荐这样写,不过学习还是可以的!
------解决方案--------------------
我也来说说自己的见解吧

比如max这个:
首先 unsigned(a - b)可得到一个数,如果a > b,则最高位为0,如果a < b,最高位为1(负数),接着后面位移31为(sizeof(int) - 1),只留下了最高位,所以结果为0或者1

然后利用c语言函数压栈的规则,b的地址大于a得地址,如果a < b,则会+1移动到b,取出b的数据,如果a > b,则不移动,取a的值
------解决方案--------------------
int max(int a,int b)
{
return *( &a+(unsigned(a-b)>>(sizeof(int)*8-1)) );
}

这个是很讨巧的方法,直接返回前一个地址的值还是后一个地址的值,也就是说,如果a>b,那么就会返回a地址对应的值 
这个正解,*就是取值的,里面有个&是取地址的!所以,直接……你懂得
------解决方案--------------------
对了,from Suse 10 /usr/include/linux/kernel.h

C/C++ code

# uname -r
2.6.16.46-0.12-smp

# cat /etc/SuSE-release
SUSE Linux Enterprise Server 10 (x86_64)
VERSION = 10
PATCHLEVEL = 1