使用 char 数组进行二进制加法

Binary addition using char array

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <stdio.h>


int main(){

    char Pbuf8[9]={"01100000"};
    char Mbuf4[10]={"01110000"};

    int num=0;
    char Snum[9]="0";   
    int carry=0;


    for(int c=7;c>=0;c--){

        //Convert a string to a number and add
        num=(Pbuf8[c]-'0')+(Mbuf4[c]-'0')+carry;

        //binary addition
        if(num==1){
            Snum[c]=num;
            carry=0;
        }else if(num==2){
            num=0;
            carry=1;
            Snum[c]=num;
        }else if(num==3){
            num=1;
            carry=1;
            Snum[c]=num;
        }
        //Convert num to string and store in Snum
        sprintf(Snum, "%d", num);  
    }
    //output
    printf("%s",Snum);
     

    return 0;
}

计算并输出Pbuf8和Mbuf4之和。

我想输出'00001011'但是输出'1'

如果没有'sprintf(number, "%d", number);'不存在,则输出'rr'。

如何获得我想要的值?

您的代码中有 3 个小错误。

  • snum必须初始化全部为0,否则只填一个0,加法的下半部分不可见
  • 您需要先将“num”转换回数字,然后再将其添加回 char 数组。所以,num+'0'
  • 删除“sprintf”,会覆盖之前创建的结果

更正后的代码如下所示:

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <stdio.h>


int main(){

    char Pbuf8[9]={"01100000"};
    char Mbuf4[10]={"01110000"};

    int num=0;
    char Snum[9]="00000000";   
    int carry=0;


    for(int c=7;c>=0;c--){

        //Convert a string to a number and add
        num=(Pbuf8[c]-'0')+(Mbuf4[c]-'0')+carry;

        //binary addition
        if(num==1){
            Snum[c]=num+'0';
            carry=0;
        }else if(num==2){
            num=0;
            carry=1;
            Snum[c]=num+'0';
        }else if(num==3){
            num=1;
            carry=1;
            Snum[c]=num+'0';
        }
        //Convert num to string and store in Snum
        //sprintf(Snum, "%d", num);  
    }
    //output
    printf("%s",Snum);
     

    return 0;
}