for循环变量超出范围?

用一种暴力的办法将十进制数字显示为二进制,设置了for循环了变量<2,但输出是2222222222222222,在python tutor里也发现有变量在运行过程中被加到了2,请大家看看是什么问题呢?

#include 
#include
using namespace std;
int main() 
{
    short int x;
    cin>>x;
    int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;
    for(a=0;a<2;a++)
    for(b=0;b<2;b++)
    for(c=0;c<2;c++)
    for(d=0;d<2;d++)
    for(e=0;e<2;e++)
    for(f=0;f<2;f++)
    for(g=0;g<2;g++)
    for(h=0;h<2;h++)
    for(i=0;i<2;i++)
    for(j=0;j<2;j++)
    for(k=0;k<2;k++)
    for(l=0;l<2;l++)
    for(m=0;m<2;m++)
    for(n=0;n<2;n++)
    for(o=0;o<2;o++)
    for(p=0;p<2;p++)
    {if(a*pow(2,15)+b*pow(2,14)+c*pow(2,13)+d*pow(2,12)+e*pow(2,11)+f*pow(2,10)+g*pow(2,9)+h*pow(2,8)+i*pow(2,7)+j*pow(2,6)+k*pow(2,5)+l*pow(2,4)+m*pow(2,3)+n*pow(2,2)+o*pow(2,1)+p*pow(2,0)==x)
    break;
    }
        printf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
    return 0;
}


{if(apow(2,15)+bpow(2,14)+cpow(2,13)+dpow(2,12)+epow(2,11)+fpow(2,10)+gpow(2,9)+hpow(2,8)+ipow(2,7)+jpow(2,6)+kpow(2,5)+lpow(2,4)+mpow(2,3)+npow(2,2)+opow(2,1)+ppow(2,0)==x)

printf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
break;
}
    

唔它本质上是想把一个十进制数转化成二进制,不应该没有满足条件的值呀