为什么这段代码的输出是空白的
Why is the output of this code blank
我正在尝试打印字符串的幂集。
代码编译成功,但是执行时,屏幕上没有打印任何内容。
我无法理解这背后的原因。
代码如下:
#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");
}
}
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;
}
我承认我对您的代码进行了额外的更改,这些更改与您的问题无关。
真正重要的是i & 1 << j
。这将检查 i
的第 j
位。为了便于阅读,也可以写成i & (1 << j)
我正在尝试打印字符串的幂集。
代码编译成功,但是执行时,屏幕上没有打印任何内容。
我无法理解这背后的原因。
代码如下:
#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");
}
}
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;
}
我承认我对您的代码进行了额外的更改,这些更改与您的问题无关。
真正重要的是i & 1 << j
。这将检查 i
的第 j
位。为了便于阅读,也可以写成i & (1 << j)