两个变量a,b,不用判断语句,找出两个中比较大的那个变量

来源:互联网 发布:linux 光标移动到行尾 编辑:程序博客网 时间:2024/04/30 00:13

法一:位运算

          

#include <iostream>using namespace std;int my_max(int x,int y){int test[2]={x,y};unsigned int c;    c=x-y;c>>=31;    return test[c];}int main(){int a=7,b=11;   // cout<<my_max(a,b)<<endl;// int c=a-b;cout<<my_max(a,b)<<endl;system("pause");return 0;}
在my_max()中,通过对无符号数c右移31位,可得(a-b)的符号位,可知其为正还是为负,这样返回数组中相应的变量即可。

       注意:对于有符号位数的位移,当右移时:1 .最高位是1,即负数,那么右移时不断补1;  

                                                                                   2. 最高位是0,即正数,那么右移时不断补0;

                   对于无符号数的位移,当右移时:只补0;

      因此,题中的无符号整形数c右移即可得到其符号位。


法二:

    

         int max=((a+b)+abs(a-b))/2;         int  min=((a+b)-abs(a-b))/2;

         这种方法是算出来的,并非像上面那样找出来的,但在别的时候也许会用到,因此也许留意一下

                                       

                          


原创粉丝点击