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

来源:学生作业帮助网 编辑:作业帮 时间:2024/07/08 05:54:03
int count=0; int m=9999; while(m) { count++; m=m&(m-1); } printf(
xQN@~ ċ1I@ĄXA%Fl14x&^<8oofeXR+hD ERȃItRlg2`J2dIZBH+C~*don i)vf.sniP^ЭEBv97BοUӊ?:L0p$1NFNv=|S̩+Do;$Bc8?YmBuuqPZ`Ae\(!"$(pa7TXI$b굢=1NV[%+Mԫ/ea[t^ Xm 7A!P4#"?`n,n4K?o@Xk.玵-\c

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