题目大意:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
例:9的二进制表示为1001,有2位是1
这道题用枚举当然好想也好做,但当二进制数的位数多起来后,这便不是一个好的算法,可以再利用位运算的解法。
思路:现将一个给的二进制数减一保存,然后将其与原来的数相与,这里可以想到1与0相与为0,1与1相与为1,这样的话,减完一之后再相与初始二进制数的低位1会被抵消,依次循环该操作,直至得到的二进制数为0,进行了几次操作,就有几个1.(笔算试试更直观)
代码如下:
#include <iostream>
#include <stdio.h>
#include