// 面试题15:二进制中1的个数 // 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如 // 把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。 #include <cstdio> int NumberOf1_Solution1(int n) { //主要思路:逐位与运算 int count = 0; unsigned int flag = 1; while (flag) { if (n & flag) ++count; flag = flag << 1; } return count; } int NumberOf1_Solution2(int n) { //主要思路:n-1 & n 相当于去掉二进制最右边1 int count = 0; while (n) { ++count; n = (n - 1) & n; } return count; }
分析:思路2牛逼!
把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于把整数的二进制表示中最右边的1变成0。
原文地址:https://www.cnblogs.com/ZSY-blog/p/12556085.html
时间: 2024-11-06 20:53:05