分开二进制数字的数字

Separating digits of a binary number?

本文关键字:数字 二进制数字      更新时间:2023-10-16

我想使用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);  
}

首先。让我首先更新您的主要部分:我认为最好将您的本地变量A和B作为STD :: String(不要忘记包含字符串标题),而不是整数:

string a,b;

然后您的halfadd呼叫看起来像这样:

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

注意:std :: Stoi函数将数据从字符串转换为Integer,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;
}