## C++实现原码一位乘 转

首席吹牛官

伤不起的计算机组成原理课程设计，老师让我们实现一些数值的基本运算，真是出人意料啊，不知道两者有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");``
``    }``
``````}

``````

### 首席吹牛官

C语言/C++编程学习之二进制原码、反码和补码

C语言是面向过程的，而C＋＋是面向对象的 C和C++的区别： C是一个结构化语言，它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程，对输入（或环境条件）进行运算处理得到...

2018/05/17
0
0
【wav音频解析】之wavread函数的C++实现

2014/09/29
12.8K
8

u7u7
2015/11/01
4.3K
30

wangjian19
2014/04/04
424
0
DirectX11--HLSL中矩阵的内存布局和mul函数探讨

X_Jun
2018/10/19
0
0

DevOps是如何实现效率的提升？

12分钟前
2
0

13分钟前
2
0

15分钟前
2
0
Linux中没有rc.local文件的解决方法

Linux中没有rc.local文件的解决方法是什么呢？这应该是很多工程师比较头疼的问题，下面就给大家例举几个解决办法。 比较新的Linux发行版已经没有rc.local文件了。因为已经将其服务化了。 解决...

xiangyunyan
15分钟前
2
0

15分钟前
2
0