简单的C语言问题(找错误)

来源:百度知道 编辑:UC知道 时间:2024/04/28 15:36:08
计算一个整数的二进制表示中1的个数:(用非循环的方法)
#include <stdio.h>
int sum(int k)
{
int t=k;
if(k==0)
return 0;
return t&1+sum(k>>=1);
}
int main()
{
int k;
printf("please input k:");
scanf("%d",&k);
printf("sum=%d\n",sum(k));
return 0;
}
这个程序哪错了,当输入8的时候,结果怎么是0???????????

我用循环写了个,供你参考:
int sum(int k)
{
int count=0;
int t=k;
while(t!=0)
{
if(t&1)
count++;
t>>=1;
}
return count;
}
你的问题找到了,是优先级的问题,&的优先级没有+高,所以递归语句应该这样写:
return ((t&1)+sum(k>>=1));

return t&1+sum(k>>=1);
程序没有错,只是这个语句,是不是你没有看清楚啊
当你输入8的时候,输出就是0啊,
这个语句是t与1位与,k》=1是右移的意思,那右移到最后的时候肯定就是0啊。