1. 程式人生 > >如何不用比較符號比較2個數的大小

如何不用比較符號比較2個數的大小

  • 方法一
    int flip(int a)
    { 
        return a^1;
    }

    int sign(int a)
    {

        //正數和0返回1,負數返回0
        reiturn ((a>>31)+1);

    }

    int getmax(int a,int b)
    {
        int c = a-b;
        int signa = sign(c);
        int signb = flip(b);
        return a*signa+b*signb;
    }

方法一適用於大部分情況,但是當a-b的值溢位時,這種不能獲得最大值,所以,請看下面的方法二:

  • 方法二
#include <iostream>

using namespace std;


class Compare
{

public:

    Compare(int a,int b)
    {

        a_ = a;

        b_ = b;
    }

    int flip(int a)
    { 
        return a^1;
    }

    int sign(int a)
    {

        //正數和0返回1,負數返回0
return ((a>>31)+1); } int getmax(int a,int b) { int c = a-b; int signa = sign(a); int signb = sign(b); int signc = sign(c); int diffab = signa^signb; int sameab = flip(diffab); int returna = diffab*signa+sameab*signc; int
returnb = flip(returna); //a與b不同符號 //a+b-,diffab=1,sameab=0,return a //a-b+,diffab=1,sameab=0,return b //a與b相同符號: //a+b+,diffab=0,sameab=1,a>b,return a //a-b-,diffab=0,sameab=1,a<b,return b return returna*a+returnb*b; } private: int a_; int b_; }; int main(void) { Compare compare(5,2); int result = compare.getmax(5,2); cout << "result="<<result<<endl; return 0; }