傷不起的計算機組成原理課程設計,老師讓咱們實現一些數值的基本運算,真是出人意料啊,不知道二者有mao關係
下面是個人實現,如今只能是相同位數的二進制,要帶上符號...
功能真的很落後....
ios
#include <iostream>
using namespace std;
string multiplie(string &s1, string &s2);//原碼一位乘
/*
*
*輔助函數
*/
void setZore(string &s, int len);
void addZore(string &s, int len);
void setValue(string &s,int value);
int main()
{
cout<<"";
string s1;
string s2;
cin>>s1;
cin>>s2;
cout <<s1<<"*"<<s2<<"="<<multiplie(s1,s2)<< endl;
return 0;
}
string multiplie(string &s1, string &s2)
{
string op;//符號位
string _s1 = s1.substr(1);//s1的絕對值
string _s2 = s2.substr(1);//s2的絕對值
int len = _s2.length();//中間值的個數,長度
string *middle = new string[len];//存放中間結果
string sum;//最後的和
if(s1.at(0) == s2.at(0))//計算符號位
{
op = "+";
}
else
{
op = "-";
}
for(int i = len - 1;i >= 0;--i)//計算各個中間值的結果
{
if(_s2.at(i) == '1')
{
middle[i] = _s1;
addZore(middle[i],len-1-i);
}
else
{
setZore(middle[i],2*len - i -1);
}
}
int n = 0;//進位
for(int i = 1;i <= 2*len - 1;++i)
{
int m = 0;//位值
for(int j = 0; j < len;++j)
{
if(i > static_cast<int>(middle[j].length()))
{
continue;
}
if(middle[j].at(middle[j].length() - i) == '1')
{
++n;
}
}
m = n%2;
n = n/2;
setValue(sum,m);
}
if(n > 0)
{
setValue(sum,n);
}
delete []middle;
return op+sum;
}
void setZore(string &s,int len)
{
for(int i = 0;i < len;++i)
{
s.append("0");
}
}
void addZore(string &s,int len)
{
setZore(s,len);
}
void setValue(string &s, int value)
{
if(value == 0)
{
s.insert(0,"0");
}
else
{
s.insert(0,"1");
}
} 最後來張運行圖吧