写一个不用cmp指令不用临时变量的int max(int a,int b)函数 不用if ? : switch

来源:互联网 发布:上海php开发培训 编辑:程序博客网 时间:2024/05/17 23:53

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++ 函数参数从右往左入栈的调用约定。(有些取巧)