最近复习到数字逻辑的时候,看到的这一章节,想去上网找个计算器转换下,结果没有...
我们没有办法,没有办法,只好自己动手写了一个
代码能够控制数字码的长度,对于长度不适合的处理的部分,回来可能会添加个自动配置长度的函数,但是现在还是需要手动输入长度
现在没这么多的需求进行完善;
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;
}
}
}
}