统计字节中1的个数是51单片机应用系统编程中最常见的问题之一。例如,从端口入8个拨码开关的值,要求统计其中闭合的开关数量,虽然可以使用case、if等条件判断对于每个位变量进行统计,但是效率极低。
本例效率较低但是要求更小的代码存储空间
/除2取模的方式获得1的个数
unsigned char divcount(unsigned char n)
{
unsigned char sum=0;/统计值
while(n)/如果n不为0则进行下一操作
{
sum+=n&0x01;∥相当于除2取模的操作
n>>=1;//将n除2,使用移位完成
}
return sum:
}}