代码是输入二进制数然后让输出10进制格式的IP地址。就想问一下代码中-‘0’中作用是啥?是必须转化为某种固定格式吗?

#include<stdio.h>
#include<math.h>
int main()
{ int i,j,k,m=0,sum=0,p=0;
char a[4][8];
for(i=0;i<4;i++)
{for(j=0;j<8;j++)
a[i][j]=getchar();}
for(i=0;i<4;i++)
{ for(k=7;k>=0;k--)
{sum=sum+(a[i][m]-'0')*pow(2,k);
m=m+1;
if(m==8)
{m=0;}
}
p=p+1;
if(p==4)
printf("%d",sum);
else
printf("%d.",sum);
sum=0;
}
}

将'0'~'9'的ASCII码0x30~0x39
减去'0'的ASCII码0x30
转换为对应的数值0x00~0x09也就是0~9