为什么此代码的输出为空

时间:2016-02-10 06:42:16

标签: 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++)
    {
        k=1;
        for(j=0;j<y;j++)
        {
            if(j & k)
                printf(" %c",s[j]);
            k=k<<1;
        }
        printf("\n");
    }
}

2 个答案:

答案 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