我不明白this xxhash函数如何能够添加比uint32可以存储的值更大的值。有人可以解释为什么这种魔法是可能的吗?
static const U32 PRIME32_1 = 2654435761U;
static const U32 PRIME32_2 = 2246822519U;
...
U32 v1 = seed + PRIME32_1 + PRIME32_2;
答案 0 :(得分:3)
标准要求标准无符号整数类型通过“包装”模值FOO_MAX + 1
来处理溢出/下溢。 (例如UINT32_MAX
是保持最大值uint32_t
)
假设U32
引用uint32_t
,则以模4294967296
为基础执行添加。