int值转换为字符串,%s格式化输出不来?解决方案

int值转换为字符串,%s格式化输出不来?

#include<stdio.h>
#include<string.h>      //strlen()函数
int stoi(const char *);         //字符串转换为数值
char * itos(int,char []);       //数值转换为字符串
int main(int argc,char *argv[])
{
        int l1,l2,mix_l;
        char arr[8*sizeof(int)+1];
        if(argc<2)
        {
                puts("请输入命令行参数");
        }
        else if(argc<3)
        {
                puts("请输入两个命令行参数");
                l1=stoi(argv[1]);
        //      l1~=l1;
                printf("%d=%s\n",~l1,itos(~l1,arr));
        }
        else if(argc<4)
        {
                l1=stoi(argv[1]);
                l2=stoi(argv[2]);
                printf("%d=%s\t%d=%s\n",~l1,itos(~l1,arr),~l2,itos(~l2,arr));
                printf("%d&%d=%s\n",l1,l2,itos(l1&l2,arr));
                printf("%d|%d=%s\n",l1,l2,itos(l1|l2,arr));
                printf("%d^%d=%s\n",l1,l2,itos(l1^l2,arr));
        }
        else
                puts("命令行参数过多");
        puts("拜拜");
        return 0;
}
int stoi(const char *ps)
{
        int size=strlen(ps);
        int k,re;
        for(k=0,re=0;k<size;k++)
                re|=(ps[k]-'0')<<(size-1-k);
        return re;
}
char * itos(int n,char *ps)
{
        int k,size=sizeof(int)*8;       //我假定一个字节8位
        for(k=0;k<size;k++)
//              ps[size-1-k]=n&(01<<k)+'0';
                ps[size-1-k]=(n>>k)&01+'0';
        ps[size]='\0';
        return ps;
}


输出结果如下:
int值转换为字符串,%s格式化输出不来?解决方案
红框里面的%s为什么输出为空白?第一个printf函数%s输出的好好地。
------解决方案--------------------
ps[size-1-k]=(n>>k)&01+'0';这句,+优先级高于&,相当于是ps[size-1-k]=(n>>k)&(01+'0');不知道楼主本意y应该是这样吧:ps[size-1-k]=((n>>k)&01)+'0';