请实现一个函数,输入一个整数,输出该属二进制表示中1的个数。例:9的二进制为1001,输出2.
方法一:
把这个数转化为二进制,用该数最小位和1做&运算判断最小位是否为1,每判断一次,将该数往右移一位,或将1网左移一位。代码如下:
int One (int n) { int count=0; for(int i=0;i<32;i++)//int类型有32位 { if(n&1) { count++; } n=n>>1;//或1=1<<1; } return n; }方法二:
把这个数转化为二进制,将该数与该数减1做&运算,使用一个计数器count,记录做了count次,count为所求结果。
原理:设一个二进制数n最右边的1位于第m位,当n-1后,m和m位之后的所有数都会变为0,m位之前的所有数都会保持不变,所以这个整数有几个1,这样的操作就会做几次。
举个例子:9的二进制为1001,9-1=8二进制为1000,1001&1000=1000,1000-1=0111,1000&0111=0。这样的操作做了两次,所以9有2个1.代码如下:
int Two(int n) { int count=0; while(n) { count++; n=n&(n-1); } return count; }