这个加法会始终产生一个唯一的数字吗?

时间:2018-12-14 06:14:25

标签: math

我不知道如何穷举地测试以下内容,所以我只想问一下这个概念是否合理。

我有两个64位无符号int变量,它们都用作位字段。这两个变量最多可以设置1到60的60位。可以设置任意数量的60位,并且可以以任何顺序设置。位61、62和63均未设置在任何一个变量中。此外,只有一个变量(只有一个)始终设置第64位。

鉴于以上描述,我认为哈希对于field1和field2的所有可能组合都是唯一的吗?

uint64_t field1 = ...;
uint64_t field2 = ...;
uint64_t hash   = field1 + field2;

1 个答案:

答案 0 :(得分:2)

不。简单的例子:

0b0011 + 0b0100 = 0b0111
0b0010 + 0b0101 = 0b0111

不可能为长度为n的所有值对提供长度为n的唯一哈希。请注意,大约有2^60 * 2^60 = 2^120个组合,因此2^60哈希不能完全适合它们。