源码,反码,补码怎么做?yangtuoyu的博客
#include<bits/stdc++.h> using namespace std; int a[10001],b[10001],c[10001];//a是存放二进制的,b是补码,c是反码 int main(){ int n; cin>>n; if(n==0){ cout<<"00000000000000000000000000000000"<<endl;//0特殊处理 cout<<"00000000000000000000000000000000"<<endl; cout<<"00000000000000000000000000000000"; } if(n>0){ int m=0; int t=n; while(n>0){ a[m]=n%2; n=n/2; m++; }//除法,求二进制的方法之一 for(int i=31;i>=0;i--){ cout<<a[i]; } cout<<endl;//输出源码 for(int i=31;i>=0;i--){ cout<<a[i]; } cout<<endl;//输出补码 for(int i=31;i>=0;i--){ cout<<a[i]; }//输出反码 }//正数情况下源码,补码,反码一样 if(n<0){//负数情况 a[31]=1;//改变符号位 int m=0; int t=n; n=abs(n);//变正数 while(n>0){ a[m]=n%2; n=n/2; m++; }//除法,求二进制 for(int i=31;i>=0;i--){ cout<<a[i]; } cout<<endl;//输出源码 for(int i=31;i>=0;i--){ if(i==31){ cout<<a[i]; continue; }//符号位特殊处理 if(a[i]==1){ c[i]=0; b[i]=0; }else{ c[i]=1; b[i]=1; } }//数字对换,0变1,1变0,求反码 if(b[0]==0){ b[0]=b[0]+1;//是0的话就加一 }else{ b[0]=b[0]+1; for(int i=0;i<=31;i++){ if(b[i]>1){ b[i]=0; b[i+1]=b[i+1]+1; } } }//否则进位 for(int i=31;i>=0;i--){ if(i==31){ continue; } cout<<b[i]; }//输出除符号位以外的数 cout<<endl; cout<<"1";//输出符号位 for(int i=31;i>=0;i--){ if(i==31){ continue; } cout<<c[i]; }//输出除符号位以外的数 } }
代码比较复杂,需要花多一些时间去查看