如果我有两个32位整数,那么检测其中哪一个具有密集/稀疏位分布的最佳方法是什么?例如,0xef00和0x1131。想知道是否有任何指标/转换可以告诉我选择后者?
感谢。
答案 0 :(得分:1)
以下是一个可能的指标:
sparseness = popcnt((x<<2) | (x<<1) | x | (x>>1) | (x>>2)) / popcnt(x)
sparseness = 1 .. 3用于密集位分配,稀疏度= 3 .. 5用于稀疏位分布。
您可以使用不同数量的班次和/或使用比特轮换而不是轮班。