前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用代码计算原码,反码和补码

利用代码计算原码,反码和补码

作者头像
Kindear
发布2018-05-28 15:58:35
4270
发布2018-05-28 15:58:35
举报

最近复习到数字逻辑的时候,看到的这一章节,想去上网找个计算器转换下,结果没有...

我们没有办法,没有办法,只好自己动手写了一个

代码能够控制数字码的长度,对于长度不适合的处理的部分,回来可能会添加个自动配置长度的函数,但是现在还是需要手动输入长度

现在没这么多的需求进行完善;

TODO//

1.可以根据输入的数字,自动确定合适的长度,也能根据选择的长度来;

2.完全可以用位运算进行解决,但是不够直观

3.对于负数的处理不够完善,这一点和1 关系密切,正是处理问题关键所在。

#include <bits/stdc++.h>
using namespace std;
string s;
void getorginalcode(int x,int len)
{
    for(int i=len;i>=0;i--)
    {
        if(x&(1<<i))
        {
            s.push_back('1');
        }
        else
        {
            s.push_back('0');
        }
    }
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int len;
        cout<<"Please input the code len you need;len = 4,8,16,32,etc...."<<endl;
        scanf("%d",&len);
        s.clear();
        cout<<"Please input the code you need : 原码(org),补码(fills),反码(rev)"<<endl;
        string opr;
        cin>>opr;
        if(opr=="org")
        {
            getorginalcode(n,len);
            cout<<s<<endl;
        }
        else if(opr=="fills")
        {
            getorginalcode(n,len);
            if(n>=0) cout<<s<<endl;
            else
            {
                for(int k=0;k<s.length();k++)
                {
                    if(s[k]-'0')
                    {
                        s[k]='0';
                    }
                    else
                    {
                        s[k]='1';
                    }
                }
                s[0]='1';//符号位
               int jw = 1;
               for(int j = s.length()-1;j>=0&&jw;j--)
               {
                   if(s[j]=='1')
                   {
                       s[j] = '0';
                       jw = 1;
                   }
                   else
                   {
                       s[j] = '1';
                       jw = 0;
                   }
               }
            }
        }
        else if(opr=="rev")
        {
            getorginalcode(n,len);
            if(n>=0)
            {
                cout<<s<<endl;
            }
            else
            {
                for(int k=0;k<s.length();k++)
                {
                    if(s[k]-'0')
                    {
                        s[k]='0';
                    }
                    else
                    {
                        s[k]='1';
                    }
                }
                s[0]='1';//符号位
                cout<<s<<endl;
            }
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档