#include <linux/bitops.h>/** * hweightN - returns the hamming weight of a N-bit word * @x: the word to weigh * * The Hamming Weight of a number is the total number of bits set in it. */unsignedinthweight32(unsignedintw){unsignedintres=w-((w>>1)&0x55555555);res=(res&0x33333333)+((res>>2)&0x33333333);res=(res+(res>>4))&0x0F0F0F0F;res=res+(res>>8);return(res+(res>>16))&0x000000FF;}unsignedlonghweight64(__u64w){#if BITS_PER_LONG == 32returnhweight32((unsignedint)(w>>32))+hweight32((unsignedint)w);#elif BITS_PER_LONG == 64__u64res=w-((w>>1)&0x5555555555555555ul);res=(res&0x3333333333333333ul)+((res>>2)&0x3333333333333333ul);res=(res+(res>>4))&0x0F0F0F0F0F0F0F0Ful;res=res+(res>>8);res=res+(res>>16);return(res+(res>>32))&0x00000000000000FFul;#endif}