#内核里的神函数# 之 hweight32
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在阅读iptables内核模块的代码时,我遇到了这样一个函数hweight32: unsigned int hweight32(unsigned int w) { unsigned int res = w - ((w >> 1) & 0x55555555); res = (res & 0x33333333) + ((res >> 2) & 0x33333333); res = (res + (res >> 4)) & 0x0F0F0F0F; res = res + (res >> 8); return (res + (res >> 16)) & 0x000000FF; } 乍看起来,似乎很难理解这段代码的功能,其实它就完成了“统计给定数字中值为1的bit位个数”的功能,怎么样,是不是有点风马牛不相及的感觉。 下面我们先看网络上的一篇分析 文章 : ============转载:华丽的分割线============ 在 linux 内核里,在计算 CPU 个数时用到了 hweight32 这个函数,这个函数就是汉明重量的计算方法。对于二进制串来说,它就是计算这个二进制串里含有多少个 1 。hweight32() 函数实现如下: /*代码如上*/ 下面先对一个任意的二进制串中 1 的数量的计算推出上面的公式: 1.