今天在写一个代码的时候发现了一个问题 大家可以先瞅瞅
当然这个跟我的错误没有太大的关系。
#include<stdio.h>
int main()
{
int x=32;
int count=0;
int data;
printf("please enter an number:");
scanf("%d",&data);
while(x--);
{if(data&0x1==1)
count++;
data = data >> 1;
}
printf("%d",count);
return 0;
}
这个代码的原意是输入一个数字 求他二进制中一的个数。这是我的缘代码。其中有一个很逗逼的错误。导致这个代码总是只能输出0或1.
我再贴一个和这个同一问题的正确的代码
//#include<stdio.h>
//int main()
//{
// int i,num,count=0;
// scanf("%d",&num);
// i=32;/*32或64位比特位*/
// while(i--)
// {
// if(num&1==1)count++;
// num=num>>1;
// /*>>右移运算符;右移时负数补1、正数补0,num>>1指右移1位*/
// }
// printf("count=%d",count);
//return 0;
//}
当然这个跟我的错误没有太大的关系。
我的代码的错误问题在于在进行循环的时候,while语句的条件后面跟了一个分号。乍一看可能觉得没有问题。我们C中很多代码后面都会跟一个分号结句。但是这里却会出现错误,这并不是一个编译错误所以代码可以正常输出。但是,while语句的条件后是不需要分号结局的。所以我们添加了一个分号相当于一个空语句。配合上后面的分号简直是做了一个大死、等于说这个循环里面是一个空语句。所以循环到最后肯定毛都没有233
这算是一个逗逼的错误写到这里纪念一下QAQ