01.uint32_t AudioSystem::popCount(uint32_t u)
02.{
03. u = ((u&0x55555555) + ((u>>1)&0x55555555));
04. u = ((u&0x33333333) + ((u>>2)&0x33333333));
05. u = ((u&0x0f0f0f0f) + ((u>>4)&0x0f0f0f0f));
06. u = ((u&0x00ff00ff) + ((u>>8)&0x00ff00ff));
07. u = ( u&0x0000ffff) + (u>>16);
08. return u;
02.{
03. u = ((u&0x55555555) + ((u>>1)&0x55555555));
04. u = ((u&0x33333333) + ((u>>2)&0x33333333));
05. u = ((u&0x0f0f0f0f) + ((u>>4)&0x0f0f0f0f));
06. u = ((u&0x00ff00ff) + ((u>>8)&0x00ff00ff));
07. u = ( u&0x0000ffff) + (u>>16);
08. return u;
09.}
通过分析这个函数,可知它主要用来计算device变量中有多少个非0位(计算32位数1的个数),例如该函数返回2,代表同时有两个device要处理。