伤不起的计算机组成原理课程设计,老师让我们实现一些数值的基本运算,真是出人意料啊,不知道两者有mao关系
下面是我的实现,现在只能是相同位数的二进制,要带上符号...
功能真的很落后....
#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");
}
} 最后来张运行图吧