UTF.COM.CN

世界上最快的判断32位整数二进制中1的个数的算法

作者:佚名 | 来源:网络 | 添加时间:2006-07-20 15:55:31 | 人气:2200

世界上最快的判断32位整数二进制中1的个数的算法(1)

const int one_in_char[256]=
{
    0, 1, 1, 2, 1, 2,2,3
......
                              ,8
}
此为 0-255 每个数中 1 的个数。 
这个雕虫小技在密码,crc...等地方使用很广泛。
int func2(int v)
{
    int n=v;
    unsigned char *ptr=(unsigned char *)&n;
    return one_in_char[ptr[0]]+one_in_char[ptr[1]]+one_in_char[ptr[2]]+one_in_char[ptr[3]];
}
对任何数,任何体系结构的cpu, 只要 sizeof(int)-1 次加法。
而且很容易扩展到任何数据类型。
使用 case最慢, 使用条件转移要受流水线预测错误的干扰。
责任编辑:冬天来了
【字号: 】【去论坛讨论】【发表评论】【打印本文】【告诉好友】【关闭窗口
网友评论(评论内容只代表网友观点,与本站立场无关!)

姓名:

验证码: 点击刷新