为两个数字的组合生成唯一值

NLV*_*NLV 13 c# uniqueidentifier

考虑我有两个数字1023232和44.我想生成一个代表这个数字组合的唯一数字.我该如何生成它?

需求

f(x,y)= f(y,x)和f(x,y)对于每个(x,y)或(y,x)是唯一的

Bot*_*000 13

如果这是两个整数,你可以这样做:

ulong F(int x, int y) {
    ulong id = x > y ? (uint)y | ((ulong)x << 32) :  
                       (uint)x | ((ulong)y << 32);
    return id;
}
Run Code Online (Sandbox Code Playgroud)

如果需要为给定大小的两个变量生成一个真正唯一的值,则需要大约每个变量大小的两倍.(好吧,现在f(x,y)== f(y,x)有点少)

您也可以通过反转相同的操作来恢复原始值.

  • int有32位,long有64位.通过组合这两个数字并将第二个32位向左移位,每个数字得到32位的结果长变量. (2认同)
  • @NLV:假设你的两个数字是32位,他通过将第一个数字放在低32位而第二个数字放在高32位中来创建一个64位数. (2认同)