比较2个二进制数

时间:2016-11-27 19:10:18

标签: c++ binary

我需要编写将比较2个二进制数并返回结果的程序 我使用XOR编写了这段代码,但是idk如何改进我的代码,所以例如100101和101001将返回一个<湾你可以帮我解决这个问题吗?

Option

2 个答案:

答案 0 :(得分:0)

a = 01, b = 10

在您的计划中,在第一次迭代中,a[i]^b[i]的值将为1。但a[i] < b[i]并且您没有考虑到这种情况,因此x的值仍为0

在第二次迭代中,XOR条件再次为真,条件(a[i] > b[i])也为真,从而将x的值增加到1

在循环之后,它将打印01 > 10,这显然是错误的。

修改后的代码:

#include <iostream>

int main() {

    std::string a, b;
    std::cin >> a >> b;
    int la = a.length(), lb = b.length();
    int x = 0;

    // -1 if both are equal
    // 0 if a > b
    // 1 if b > a
    int flag = -1;
    // if you only want to check for equal length strings
    if (la == lb)
    {
        for (int i = 0; i < la; i++)
        {
            if (a[i]^b[i] == 1)
            {
                if(a[i] > b[i])
                    flag = 0;
                else
                    flag = 1;
                break;
            }
        }

        if (flag == 0)
            std::cout << a << " > " << b << std::endl;
        if (flag == 1)
            std::cout << a << " < " << b << std::endl;
        if (flag == -1)
            std::cout << a << " = " << b << std::endl;
    }

}

答案 1 :(得分:0)

猜猜这会更好 除非它们相等,否则不需要迭代整个字符串。 只需找到第一个'1',而之前有1个的那个将更大。 就这么简单

int main()
{
string a,b;
cin>>a>>b;
size_t aLoc=-1,bLoc=-1;
do
{
    aLoc = a.find("1",aLoc+1);
    bLoc = b.find("1",bLoc+1);
    if(aLoc<bLoc)
    {
        cout<<a<<">"<<b;
        return 0;
    }
    else if(aLoc>bLoc)
    {
        cout<<a<<"<"<<b;
        return 0;
    }
}while(aLoc==bLoc && aLoc!=string::npos);
cout<<a<<"="<<b;
return 0;
}

编辑:

aLoc在第一个字符串中给出1的位置,为第二个字符串给出bLoc的位置 让我们看看1 exmaple

a = 10111000;

这里首先aLoc = 1,因为第一个'1'在位置1

b = 10001100;

这里bLoc = 1;

现在进行下一次迭代, aLoc将为3,因为下一个'1'位于第3位

和bLoc将是5自然aLoc

这意味着'1'在字符串a中排在第一位。

因此

if(aLoc<bLoc)
   a>b;