我正在尝试打印字符串的电源设置。
代码编译成功,但执行时,屏幕上不会打印任何内容。
我无法理解背后的原因。
以下是代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
void main()
{
char s[]="abcd";
int i,j,k=1;
int y=strlen(s);
int z=pow(2,y);
for(i=0;i<z;i++)
{
k=1;
for(j=0;j<y;j++)
{
if(j & k)
printf(" %c",s[j]);
k=k<<1;
}
printf("\n");
}
}
答案 0 :(得分:9)
j & k
始终评估为0
。
j = 0, k = 1 ==> j & K = 0
j = 1, k = 10 ==> j & K = 0
j = 10, k = 100 ==> j & K = 0
j = 11, k = 1000 ==> j & K = 0
答案 1 :(得分:1)
此代码可以根据需要使用:
#include <stdio.h>
#include <string.h>
int main()
{
char s[] = "abcd";
int i,j;
int y = strlen(s);
int z = 1 << y;
for(i = 0; i < z; i++)
{
for(j = 0; j < y; j++)
{
if(i & 1 << j)
printf(" %c",s[j]);
}
putchar('\n');
}
return 0;
}
我承认我在您的代码中进行了额外的更改,这与您的问题无关。
真正重要的是i & 1 << j
。这将检查j
的{{1}}位。为了便于阅读,您还可以编写i
。