gpt4 book ai didi

c# - 计算 64 位(长,大)整数中的位数?

转载 作者:IT王子 更新时间:2023-10-29 04:33:29 28 4
gpt4 key购买 nike

我已通读 this SO question关于 32 位,但是 64 位数字呢?是不是只屏蔽上下4个字节,对32位进行计数,然后相加?

最佳答案

您可以在这里找到 64 位版本 http://en.wikipedia.org/wiki/Hamming_weight

是这样的

static long NumberOfSetBits(long i)
{
i = i - ((i >> 1) & 0x5555555555555555);
i = (i & 0x3333333333333333) + ((i >> 2) & 0x3333333333333333);
return (((i + (i >> 4)) & 0xF0F0F0F0F0F0F0F) * 0x101010101010101) >> 56;
}

这里是代码形式的 64 位版本 How to count the number of set bits in a 32-bit integer?

根据 Joshua 的建议,我会将其转换为:

static int NumberOfSetBits(ulong i)
{
i = i - ((i >> 1) & 0x5555555555555555UL);
i = (i & 0x3333333333333333UL) + ((i >> 2) & 0x3333333333333333UL);
return (int)(unchecked(((i + (i >> 4)) & 0xF0F0F0F0F0F0F0FUL) * 0x101010101010101UL) >> 56);
}

编辑:我在测试 32 位版本时发现了一个错误。我添加了缺少的括号。求和应该在最后一行按位&之前完成

EDIT2 为 ulong 添加了更安全的版本

关于c# - 计算 64 位(长,大)整数中的位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2709430/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com