帮小弟我解读下这个程序

帮我解读下这个程序
#include <stdio.h>
#include <limits.h>
int main(void)

int a,i=0; 
unsigned int mark=1<<CHAR_BIT*sizeof(int)-1; 
scanf("%d",&a); /*输入要查看二进制形式的整数*/ 
while (mark)  {     
putchar(a&mark?'1':'0');     
if (++i%4==0) 
putchar(' ');     
mark>>=1;  
}  
putchar('\n'); 
return 0;
}

------解决方案--------------------

#include <stdio.h>
#include <limits.h>
int main(void)

int a,i=0; 
unsigned int mark=1<<CHAR_BIT*sizeof(int)-1; //最高位为1,其余位为0。。
scanf("%d",&a); /*输入要查看二进制形式的整数*/ 
while (mark)  {     
putchar(a&mark?'1':'0'); //mark永远只有一位为1,如果a对应的那位也为1,则a&mark大于0。。    
if (++i%4==0)//每4位输出一个空格。。 
putchar(' ');     
mark>>=1; //mark右移一位,也就是为1那个位右移了一位。。 
}  
putchar('\n'); 
return 0;
}

------解决方案--------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
    int i,v;
    char bs[33];
    char b[33];
    char hs[9];
    char h[9];
    char s[4];
    char *e;

// 十进制整数转二进制串;
    i=1024;
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("i=%d,bs=%s\n",i,bs);
// 十进制整数转十六进制串;
    i=1024;
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("i=%d,hs=%s\n",i,hs);
// 十六进制字符串转成十进制数
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    printf("hs=%s,i=%d\n",hs,i);
// 二进制字符串转化为十六进制字符串;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("bs=%s,hs=%s\n",bs,hs);
// 二进制字符串转化为十进制数;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    printf("bs=%s,i=%d\n",bs,i);
// 十六进制字符串转成二进制串
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("hs=%s,bs=%s\n",hs,bs);
// ASC\GBK字符串转十六进制串
    strcpy(s,"a汉");
    i=0;