для операций AND OR и XOR можно не переводить в тип unsigned short (двойная работа). Я предлагаю вот так:
Код:
#include <iostream>
#include <string>
using namespace std;
string op_and(string s1, string s2)
{ cout<<s1<<'\n'<<"AND\n"<<s2<<'\n'<<"Equals\n";
string ret="000000000000";
for (int i = 0; i <= 11; i++)
if (s1[i]=='1'&&s2[i]=='1') ret[i]='1';
return ret;
}
string op_or(string s1, string s2)
{
cout<<s1<<'\n'<<"OR\n"<<s2<<'\n'<<"Equals\n";
string ret="000000000000";
for (int i = 0; i <= 11; i++)
if (s1[i]=='1'||s2[i]=='1') ret[i]='1';
return ret;
}
string op_xor(string s1, string s2)
{
cout<<s1<<'\n'<<"XOR\n"<<s2<<'\n'<<"Equals\n";
string ret="111111111111";
for (int i = 0; i <= 11; i++)
if ((s1[i]=='1'&&s2[i]=='1')||(s1[i]=='0'&&s2[i]=='0')) ret[i]='0';
return ret;
}
int main(int argc, char* argv[])
{
string s1="001111100011" ;
string s2="001010100011" ;
string s3="";
s3=op_and(s1,s2);
cout<<s3<<'\n';
s3=op_or(s1,s2);
cout<<s3<<'\n';
s3=op_xor(s1,s2);
cout<<s3<<'\n';
cin>>s3;
return 0;
}
А для операций ADD и SUB придется переводит в число потом добавлять, вычитать и переводить обратно. В этом помогут исходники
pva