问题3:对字节变量,其二进制表示法中求有多少个1,如 00101010则返回值为 3,也是要求效率最高
关于此题答案很多,这里不再一一列出,下面这个算法时间复杂度是O(m),m取决于数字中1的个数
- //判断一个整数二进制表示中1的个数
- public static int OnesCount(int number)
- {
- int num = 0;
- while (number != 0)
- {
- number &= number - 1;
- num++;
- }
- return num;
- }
关于其他各种算法的探讨,可以参考两本书,程序员面试攻略第2版(机械工业出版社) 11.2位操作 和 编程之美(电子工业出版社) 2.1 有更详细的论述
下面我们关注一下枚举类型和位标记