C 为什么此代码的输出为空

C 为什么此代码的输出为空,c,string,bit-manipulation,C,String,Bit Manipulation,我正在尝试打印字符串的幂集 代码编译成功,但执行时,屏幕上不会打印任何内容 我无法理解这背后的原因 代码如下: #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++) {

我正在尝试打印字符串的幂集

代码编译成功,但执行时,屏幕上不会打印任何内容

我无法理解这背后的原因

代码如下:

#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");
    }
}
#包括
#包括
#包括
void main()
{
字符s[]=“abcd”;
int i,j,k=1;
int y=strlen(s);
int z=功率(2,y);

对于(i=0;i
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

此代码按您的需要工作:

#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;
}
#包括
#包括
int main()
{
字符s[]=“abcd”;
int i,j;
int y=strlen(s);

int z=1您应该在
if(j&k)
之前打印
j
k
的值,我想您会看到问题所在。或者学习使用调试器,这样您就可以逐步完成代码并查看发生了什么。谢谢。我把逻辑放在代码中是错误的。现在没事了