1、写一个高效C语言程序,计算一个无符号整数中1的个数
0000----------0
0100----------1
1001----------2
1111----------4
一般思路肯定是循环右移判断与0x0001相与的结果是否为1。
算法如下:
unsigned char count; unsigned int x;
for ( count=0; x; count++)
x&=x-1;
最后循环的次数count 就是无符号int型数据中1的个数。
若求比特0的个数,则程序修改如下(16位单片机):
unsigned char count; unsigned int x;
for ( count=16; x; count--)
x&=x-1;
|