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

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 03:05:40
int count=0; int m=9999; while(m) { count++; m=m&(m-1); } printf(

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