用代码输出一个数N的原码,反码和补码,我这样写对吗?
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,aa[10001],u,a[10001],b[10001],c[10001];
bool cmp=0;
signed main()
{
cin>>n;
if(n<0)cmp=1;
int nn=abs(n);
while(nn>0) //将n转为二进制数
{
aa[++u]=nn%2;
nn/=2;
}
int t=7-u;
for(int i=1;i<=u;i++)
{
a[u-i+1]=aa[i];
}
if(t!=0)
{
for(int i=1;i<=u;i++)
{
a[i+t]=a[i];
a[i]=0;
}
u=7;
}
if(cmp==0)cout<<0;
else cout<<1;
for(int i=1;i<=u;i++) //输出n的原码
{
cout<<a[i];
if(i==3)cout<<' ';
}
cout<<endl;
if(cmp==0)
{
for(int i=1;i<=u;i++)b[i]=a[i];
}
else
{
for(int i=1;i<=u;i++)
{
if(a[i]==1)b[i]=0;
else b[i]=1;
}
}
if(cmp==0)cout<<0;
else cout<<1;
for(int i=1;i<=u;i++) //输出n的反码
{
cout<<b[i];
if(i==3)cout<<' ';
}
cout<<endl;
for(int i=1;i<=u;i++)
{
c[i]=b[i];
}
if(cmp==1)
{
c[u]++;
int sum=u;
while(c[sum]==2 && sum>=1)
{
c[sum]=0;
c[--sum]++;
}
}
if(cmp==0)cout<<0;
else cout<<1;
for(int i=1;i<=u;i++) //输出n的补码
{
cout<<c[i];
if(i==3)cout<<' ';
}
return 0;
}