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