有人能解释一下这是怎么回事吗?
#define BX_(x) ((x) - (((x)>>1)&0x77777777) \
- (((x)>>2)&0x33333333) \
- (((x)>>3)&0x11111111))
#define BITCOUNT(x) (((BX_(x)+(BX_(x)>>4)) & 0x0F0F0F0F) % 255)澄清:
理想情况下,答案将从以下几个方面开始:
宏:"BX_“从传递的数字中减去三个值。
这三个值代表:
这允许BITCOUNT()按以下方式工作.
干杯,
大卫
发布于 2010-01-05 23:02:28
正如约翰斯从精彩的钻头缠绕式黑客页面中引用的那样,Athlon™64和Opteron™处理器软件优化指南在第179和180页上对该算法进行了出色而详细的描述--对应于PDF的195页和196页。
还描述了相同的想法和一些替代解决方案以及它们的相对性能:此页。
https://stackoverflow.com/questions/2009623
复制相似问题