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

法一:位运算

          

#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;

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

                                       

                          


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值