int count=0; int m=9999; while(m) { count++; m=m&(m-1); } printf("count=%d\n",count);count是多少(没有上机的条件的话)

来源:学生作业帮助网 编辑:六六作业网 时间:2024/08/29 03:59:49
intcount=0;intm=9999;while(m){count++;m=m&(m-1);}printf("count=%d\n",count);count是多少(没有上机的条件的话)intco

int count=0; int m=9999; while(m) { count++; m=m&(m-1); } printf("count=%d\n",count);count是多少(没有上机的条件的话)
int count=0; int m=9999; while(m) { count++; m=m&(m-1); } printf("count=%d\n",count);
count是多少(没有上机的条件的话)

int count=0; int m=9999; while(m) { count++; m=m&(m-1); } printf("count=%d\n",count);count是多少(没有上机的条件的话)
答案是8
m=m&(m-1); 可以理解为,将m的为1的位置为0
就说其中一个9,用8位表示为
0000 1001
9 - 1就是
0000 1000
9 & 8就是
0000 1000,于是就将最低位的1置为0了
同理,m为9999,一共有8个位上面是1,因此需要8次才能将所有的1置为0