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

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

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

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

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

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;
            }
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AndroidTv

谈谈你对 Java 平台的理解声明提问正文

12540
来自专栏java学习

Java每日一练(2017/7/6)

最新通知 ●回复"每日一练"获取以前的题目! ●【新】Ajax知识点视频更新了!(回复【学习视频】获取下载链接) ●答案公布时间:为每期发布题目的第二天 ★【新...

36490
来自专栏進无尽的文章

设计模式| 行为型模式 (上)

行为型模式共十一种:策略模式、模板方法模式、观察者模式、迭代器模式、解释器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式。 分两篇文...

17320
来自专栏编程

养良好C语言编程风格,编优质C语言代码,这才是C语言的开始

个人c语言编程风格总结 总结一下我个人的编程风格及这样做的原因吧,其实是为了给实验室写一个统一的C语言编程规范才写的。首先声明,我下面提到的编程规范,是自己给自...

62650
来自专栏Crossin的编程教室

【Python 第23课】 if, elif, else

今天补充之前讲过的一个语句:if。为什么我跳要着讲,因为我的想法是先讲下最最基本的概念,让你能用起来,之后你熟悉了,再说些细节。 关于if,可以发送数字『7』回...

29360
来自专栏祥子的故事

python | 统计频次

565110
来自专栏Web 开发

JavaScript Cookbook 2nd 之 Function

昨晚翻了一下,虽然都是一些旧知识,不过深入下去对照着其他资料一起看,还是能发现一些有意思的地方。

9800
来自专栏锦小年的博客

python学习笔记1-理解Python语言

本章主要介绍一下python语言的相关知识,包括其语言类型、作为面向对象的3大特性以及5大原则,在末尾介绍了其优缺点。 python是解释型的脚本语言 解...

22090
来自专栏Jed的技术阶梯

Java设计模式之迭代器模式

老板让我打印各个项目的报表,包括项目名称,人数,开销等信息,这个好办,看下面的类图:

29720
来自专栏IT派

程序员们,再不升级 Java 10 就晚了!

正如我们大家都知道的,Java 的最新版本已经来到了10。本文将重点介绍当前正在开发的一些有趣的 Java 新功能。

12620

扫码关注云+社区

领取腾讯云代金券