for循环中变量的值超出所设范围?

用一种暴力的办法输出一个十进制数的二进制形式,发现输出为2222222222222222,但for循环里不是已经写了变量<2了吗?用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;
}


25行的break只能退出最内层的循环啊
所以一直到所有上层循环全部退出才会输出,这时候上面的循环变量都是2了
你应该在最内层if语句的代码块中执行这个printf语句才对