总结总结以前写过的一些题目吧。。。。回顾
题目:
请实现一个函数,输入一个整数,输出该数二进制表示的1的个数。例如,9的二进制是1001,有2位是1.因此,如果输入时9,则输出就是2.
思路:
方法一: 整型数据除法
该整数除2,原来的数字将会减少一个0;
若有余数,则表示当前位置有一个1;
int Count(int data)
{
int num = 0;
while(data)
{
if(data%2 == 1)
{
num++;
}
v = data/2;
}
return num;
}
方法二:使用位操作
先判断data最后一位的值为“0”或是“1”
是“1”,给计数器++,否则不++;
再利用位运算右移去掉最后一位
int Count(int data)
{
int num = 0;
while(data)
{
num+= data &0x01;
data >>= 1;
}
return num;
}
方法三:使用位操作
用data和data-1进行“&”操作,一次&后,找到一个“1”;
重置data = (data-1),知道data = 0时结束
(这种方法是效率最高的)
int Count(int data)
{
int num = 0;
while(data)
{
data &= (data-1);
num++;
}
return num;
}
本文探讨了三种不同的方法来计算整数二进制表示中1的个数,包括整型数据除法、使用位操作进行逐位检查以及高效地利用位运算消除1。这些方法适用于算法优化和计算机科学教育。
2442

被折叠的 条评论
为什么被折叠?



