分隔二进制数字的数字?

时间:2017-03-11 12:28:41

标签: c++

我想用c ++创建一个半加法器,因为我可能需要将二进制数字分开来逐个添加它们。我需要为此创建一个数组吗?例如,为了将第一个数字的第一个“索引”添加到第二个数字的第一个“索引”中? 对于那些不知道半加器是什么的人,它会将二进制数的单独数字添加到另一个数字而不管进位。

It works like this:

 1101
+0011
=1110

这是我为添加二进制数字而编写的代码,如何将其编写为写入4位二进制数?

#include <iostream>
using namespace std;

int halfadd(int a,int b){
  if (a==0){
    if (b==0){
      return 0;
    }
    else return 1;
  }
  else{
    if (b==0){
      return 1;
    }
    else return 0;
  }
}

int main(){
  int a,b;
  cout <<"Enter the two numbers to be added: ";
  cin>>a; cin>>b;
  cout<<"***Half Sum***"<<endl;
  cout<<a<<"+"<<b<<"="<<halfadd(a,b);  
}

1 个答案:

答案 0 :(得分:1)

首先要做的事情。让我先更新你的主要部分: 我认为你的局部变量a和b更好是std :: string(不要忘记包含字符串头)而不是整数:

string a,b;

那么你对halfadd的调用可能如下所示:

cout << a << "+" << b << "=" << halfadd(stoi(a, nullptr, 2), stoi(b, nullptr, 2));

注意:std::stoi函数将数据从字符串转换为整数,std :: stoi的第三个参数是由字符串表示的预期整数值的基础(如果您想知道的话)。

让我们继续讨论halfadd函数。由于已将字符串转换为实际整数值,因此可以使用例如按位运算符。 XOR操作正是您所需要的。仅当相应位具有不同值时,XOR的结果才为1。让我们看看我们简单化的halfadd函数:

string halfadd(int a, int b) {
    // C++ introduced keywords for operators
    // so you can use keyword 'xor' too
    return dec2bin(a ^ b); // ^ is XOR operator
}

最后但并非最不重要的是,我自己写了一个将结果转换回字符串的函数。它可以看起来像这样:

string dec2bin(int value) {
    string result;
    while (value) {
        if (value %  2)
            result = '1' + result;
        else
            result = '0' + result;
        value /= 2;
    }
    return result;
}