先看代码:
1 #include <stdio.h>
2
3 int fun(int x)
4 {
5 int count =0;
6 while(x)
7 {
8 count++;
9 x = x & (x-1);
10 }
11 return count;
12 }
13
14 void main(void)
15 {
16 int j =0;
17 int m =0;
18 j = fun(9999); // 此处“9999”只是一个举例
19 return;
20 }
2
3 int fun(int x)
4 {
5 int count =0;
6 while(x)
7 {
8 count++;
9 x = x & (x-1);
10 }
11 return count;
12 }
13
14 void main(void)
15 {
16 int j =0;
17 int m =0;
18 j = fun(9999); // 此处“9999”只是一个举例
19 return;
20 }
你猜一下最后 “j”的值是多少? 这个是我在某个文档上看到的一道微软笔试题。
“j”的值为 8
思路:将“9999”转换二进制,看有多少个“1”。若还是理解不了,请手动用笔算(在二进制情况下进行)。