Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C编程:生成散列键(uint32)(输入:一个uint32和一个uint64以生成唯一键)_C - Fatal编程技术网

C编程:生成散列键(uint32)(输入:一个uint32和一个uint64以生成唯一键)

C编程:生成散列键(uint32)(输入:一个uint32和一个uint64以生成唯一键),c,C,对于哈希表,我需要从输入中生成一个uint32类型的唯一键:一个uint32和一个uint64变量。您能帮我生成uint32类型的唯一密钥吗 输出:一个uint32唯一值 输入:一个uint32和一个uint64 您能帮我理解一下逻辑吗?我知道您正在为哈希表实现一个哈希函数。 基本上,您可以使用异或来折叠uint64,并使用uint32对结果进行异或 uint32_t hash( uint32_t a , uint64_t b ) { return a ^ (b >> 32

对于哈希表,我需要从输入中生成一个uint32类型的唯一键:一个uint32和一个uint64变量。您能帮我生成uint32类型的唯一密钥吗

输出:一个uint32唯一值

输入:一个uint32和一个uint64


您能帮我理解一下逻辑吗?我知道您正在为哈希表实现一个哈希函数。 基本上,您可以使用异或来折叠uint64,并使用uint32对结果进行异或

uint32_t hash( uint32_t a , uint64_t b ) {
  return a ^   (b >> 32 )   ^ b;

}

很抱歉,我关闭了您的问题。如果您添加了任何一个try,我将重新打开它。请您帮助我使用上面提到的两个输入a生成唯一值。如果您的输入是一个uint32和一个uint64,并且您的输出是一个uint32,那么您有96位输入和32位输出,并且(除非你有什么事没告诉我们)您无法为每个输入生成唯一的输出。但哈希值的唯一性并不是哈希值的工作方式。如果您的输入的比特数超过生成的哈希值,则会发生冲突,而这正是应该的情况。如果您在谷歌搜索“哈希函数算法”,则需要显示您尝试了什么你会发现很多命中率。散列值不需要是唯一的-阅读有关散列表如何工作的更多信息。如果我有两个变量“uint32 a”和“uint64 b”,那么对于这两个变量“a”和“b”,我需要一个类型为“uint32”的唯一数字,以便我需要用于散列表的唯一数字。非常感谢。对于不同的情况,它会是唯一的吗a和b的值?只是想确认一下。不,它不可能是唯一的,但它在某种程度上保留了输入的分布。你不能将96位信息存储到32位信息中。我个人会再移位一点。如果a和b相等,这个散列函数将始终为零。这可能不是问题,但a==b似乎是一个问题at的发生可能不是随机的,所以除非我对输入有更多的了解,否则我会将其考虑在内。@Thomas,我同意你的看法。