这种情况的溢出该怎么修改?

问题是二进制转十进制、十六进制,但是我写完上传后一直说部分正确,我同学说应该是溢出问题,但他也不太明白,应该改哪里?

#include <stdio.h>
#include <string.h>
void f(int x,char *p)
{
    double div;
    int k=0;
    if (x==0)
    {
        *p='0';
    }
    if (x<0)
    {
        x=-x;
        *p='-';
        p++;
    }
    for (int i=0;x!=0;i++)
    {
        div = x % 16;
        x = x / 16;
        if ((div-10) < 0)
            *(p+i) = div + '0';
        else *(p+i)='A'+div-10;
        div=0;
        k++;
    }
    for(int i=0;i<k/2;i++)
    {
        char temp=p[i];
        p[i]=p[k-1-i];
        p[k-1-i]=temp;
    }
} 

int main()
{
    int b[10];
    double c=0;
    int a,i=0;
    char x[10] = "";
    scanf("%d",&a);
    while(a!=0)
    {
        b[i]=a%10;
        a/=10;
        i++;
    }
    i--;
    for(;i>=0;i--)
        c=c*2+b[i];
    printf("%.0f\n",c);
    f(c,x);
    printf("0x%s",x);
}

有个问题,二进制一般首位表示符号。

img


你是怎么判断符号的?