法一:位運算ios
[cpp] view plaincopyprint?數組
#include <iostream> spa
using namespace std; .net
int my_max(int x,int y) code
{ blog
int test[2]={x,y}; get
unsigned int c; io
c=x-y; class
c>>=31; test
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;
}
#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右移便可獲得其符號位。
法二:
[cpp] view plaincopyprint?
int max=((a+b)+abs(a-b))/2;
int min=((a+b)-abs(a-b))/2;
int max=((a+b)+abs(a-b))/2; int min=((a+b)-abs(a-b))/2;
這種方法是算出來的,並不是像上面那樣找出來的,但在別的時候也許會用到,所以也許留意一下