#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]; }//输出除符号位以外的数 } }
网上很少有这种,我查过,而且就算有,也比我的复杂,而且有一群人在抄袭,转载成自己的代码,希望大家支持此做法,也望不要有人再抄袭,转载成自己的代码了