int main()
{
char *str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int num=26;
for(int i=0;i<(1<<num);i++)//1<<26为2的26次方 ,循环①
{
for(int j=0;j<num;j++)//j表示二进制右数第几位,循环②
{
if((i&(1<<j))!=0)
{
printf("%c",str[j]);
}
}
printf("\n");
}
}
分析:首先看图了解大概
然后具体代码分析:
结果数据太多的话难分析,就当num=3的时候分析,结果如图所示:
1<<num 即为1<<3=8,即进行8次循环打印。
当i=0,num=3,;
j=0时,1<<j 等同于 1<<0位,为1 ;0&1为0;
j=1时,1<<j 等同于 1<<1位,二进制为10; 0&10 为0;
j=2时,1<<j 等同