文档章节

C++实现原码一位乘

首席吹牛官
 首席吹牛官
发布于 2015/05/22 12:50
字数 372
阅读 22
收藏 0

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

最后来张运行图吧
   

本文转载自:http://blog.csdn.net/zhx6044/article/details/7672356

首席吹牛官
粉丝 9
博文 368
码字总数 191938
作品 0
闵行
程序员
私信 提问
C语言/C++编程学习之二进制原码、反码和补码

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

小辰带你看世界
2018/05/17
0
0
【wav音频解析】之wavread函数的C++实现

本文由三部分组成,第一部分背景介绍 —— 音频类型及本文动机,第二部分类比matlab下wavread()函数的作用,第三部分则给出该函数的C++实现。 一 背景介绍 1.1 本文动机 1)所有wav音频处理的...

刘小米
2014/09/29
12.8K
8
关于C的IDE用哪一个更好?

如今C的开发环境种类繁多,功能也良莠不齐。小弟在写C代码的时候,总对C的IDE很纠结,不知道用哪个好。。 昨天照书上抄了一个80行的代码,在Dev C++平台编译的时候出现几个错误。编译显示没错...

u7u7
2015/11/01
4.3K
30
关于JNI返回十六进制字符串到JAVA层的说明

由于java层使用的是unicode编码方式即UTF-16,而c/c++本地代码使用的是UTF-8编码方式,所以在JNI层返回16进制字符串的问题比较难搞,不多说,直接粘码: JAVA部分代码: public class MainA...

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

前言 说实话,我感觉这是一个大坑,不知道为什么要设计成这样混乱的形式。 在我用的时候,以矩阵,并且mul函数以向量左乘矩阵的形式来绘制时的确能够正常显示,并不会有什么感觉。但是也有人...

X_Jun
2018/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

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

随着企业业务对软件系统日益依赖,IT管理与研发模式也随之对“敏态”模式产生了需求,也就是今天时常提起的DevOps。提升效率,是DevOps实践的核心内容之一。就让我们来一起从软件生命周期的业...

嘉为科技
12分钟前
2
0
总结:linux目录之proc

我们系统大部分的基础数据采集,其实就是读取proc目录下的文件,并解析获取数据的过程。 1、如cpu利用率:直接cat /proc/cpuinfo命令,然后获取输出内容,并解析里面的数据,如cpu核数等; ...

浮躁的码农
13分钟前
2
0
比原Bapp红包应用

喜迎国庆期间,比原链在自己的移动端钱包Bycoin(下载地址)和google插件钱byone中推出了红包应用,在国庆期间深受大家好评。 那我们今天就来大概介绍一下比原红包,以及基于比原链开发dapp应用...

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

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

xiangyunyan
15分钟前
2
0
数据中台在阿里巴巴集团内部的实践情况

作者:品鉴 数据中台门在阿里巴巴集团干什么的,由哪个部门掌管?数据中台在阿里巴巴的主要作用是什么呢?外面吹嘘这么神秘的数据中台在阿里实践的如何呢?今天小编正好要采访数据技术及产品...

阿里云官方博客
15分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部