关于c++二进制补码程序的问题?


#include<iostream>
#include<string>
#include<cstring>
#include<stdio.h>
using namespace std;
int main(){
    char a[101];
    while(cin>>a){
        int s=strlen(a);
        char b[101];
        bool g=true;
        if(a[0]=='1'){
            int k=0;
            for(int i=1;i<s;i++){
                 if(a[i]=='1'){
                     b[k++]='0';
                 }
                 
                 else {
                     b[k++]='1';
                 }
             }
             cout<<b<<endl; 
            for(int i=s-2;i>=0;i--){//-2ÊÇÒòΪÊý×鿪ͷºÍÉÏÃæÉ¾µôµÄÊ׸öÔªËØ 
                if(b[i]=='1'&&g==true){
                    b[i]='0';
                }
                else if(a[i]=='0'&&g==true){
                    b[i]='1';
                    g=false;
                }
            }
            cout<<"1"<<b<<endl;
        }
        else{
            cout<<a<<endl;
        }
        
    }
}

img

这是怎么回事呢?前面还好好的

b[0]没赋值,下面加1的循环里面应该是从s-1开始

 
#include<iostream>
#include<string>
#include<cstring>
#include<stdio.h>
using namespace std;
int main(){
    char a[101];
    while(cin>>a){
        int s=strlen(a);
        char b[101];
        bool g=true;
        b[0]=a[0];
        
            int k=0;
            for(int i=1;i<s;i++){
                 if(a[i]=='1'){
                     b[k++]='0';
                 }
                 else {
                     b[k++]='1';
                 }
             }
             b[k] = '\0';
             cout<<b<<endl; 
            for(int i=s-1;i>0;i--){
                if(b[i]=='1'&&g==true){
                    b[i]='0';
                }
                else if(a[i]=='0'&&g==true){
                    b[i]='1';
                    g=false;
                    break;//结束循环
                }
            }
            cout<<b<<endl;
        //}
        //else{
         //   cout<<a<<endl;
        //}
    }
}