原码转补码反码

发布时间 2023-10-22 09:43:39作者: 陈若麟
#include <bits/stdc++.h> 
using namespace std;
string a;int c=0;
void fam(){
	if(a[0]=='0'){
		cout<<a;
	}else{
		cout<<'1';
		for(int i=1;i<a.size();i++){
			if(a[i]=='0'){
				cout<<'1';
			}else{
				cout<<'0';
			}
		}
	}
}
int bu(){
	if(a[0]=='0'){
		cout<<a;
	}else{
		for(int i=1;i<a.size();i++){
			if(a[i]=='0'){
				a[i]='1';
			}else{
				a[i]='0';
			}
		}
		for(int i=0;i<a.size();i++){
			if(a.substr(i,i+1)=="1"){
				c=1;
			}else{
				c=0;
				break;
			}
		}
		if(c==1){
			cout<<"11";
			for(int i=1;i<a.size();i++){
				cout<<"0";
			}
			return 0;
		}else{
			for(int i=a.size()-1;i>=1;i--){
				if(a[i]=='0'){
					a[i]='1';
					break;
				}else{
					a[i]='0';
				}
			}
		}
		cout<<a;
	}		
}
int main(int argc, char** argv) {
	int b;
	cout<<"1 反码 2 补码"; 
	cin>>b>>a;
	if(b==1){
		fam();
	}else if(b==2){
		bu();
	}
	return 0;
}