十进制数转为二进制,再将二进制反转,在转换为十进制

#include
using namespace std;
void ReverseArr(int n)
{
int m=n;
int x,count;
int i=0;
char a[20],b[20];
for(int a1=0;a1 {
a[i]=0;
b[i]=0;
}
if(m return;
if(m>=0)
{
while(m!=0)
{
x=m%2;
m=m/2;
a[i]=x;
i++;
}
}
count =i;
while(i>0)
printf("%d",a[--i]);
printf("\n");
while(i {
int j=0;
b[j]=a[i++];
printf("%d",b[j]);
j++;
}
printf("\n");
int sum=0;
for(int i1=count-1;i1>=0;i1--)
{
sum*=2;
sum+=b[i1]-'0';
}
printf("%d",sum);
printf("\n");
}

int main()
{
int n;
cin>>n;
ReverseArr(n);
return 0;
}
输入8
输出:
1000
0001
1
在最后转换为十进制的时候输出却是-1447
求解答

 void ReverseArr(int n)
{
    int m=n;
    int x,count;
    char a[20],b[20];
    for(int a1=0;a1 < 20; a1++)
    {
        a[a1]=0;
            b[a1]=0;
    }
    if(m < 0)return;

    int i=0;
    if(m>=0)
    {
        while(m!=0)
        {
            x=m%2;
            m=m/2;
            a[i]=x;
            i++;
        }
    }
    count =i;
    while(i>0)
        printf("%d",a[--i]);
    printf("\n");
    int j=0;
    while(i < 20)
    {
        b[j]=a[i];
        printf("%d",b[j]);
        j++;
        i++;
    }
    printf("\n");
    int sum=0;
    for(int i1=count-1;i1>=0;i1--)
    {
        sum*=2;
        sum+=b[i1];
    }
    printf("%d",sum);
    printf("\n");
}