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)) );
}
#include
int main(int argc, char *argv[]) {
printf("%d/n",max(-1,3));
printf("%d",min(-1,3)); return 0;
}
输出: 3 -1
关键就是负数的补码表示 max,min中的代码
利用了 c/c++ 函数参数从右往左入栈的调用约定。(有些取巧)