Vya*_*lav 1 c++ integer unique
我尝试使用Cantor和Szuszik配对函数,但是例如a = 200,b = 201 c = 202得到的P(a,b,c)= P(P(a,b),c)它已经非常大了不适合int的数字.
独特地组合[0:1000]范围内的三个数字是没有问题的(假设int您的系统是32位或更大,那就是):
int combine(int a, int b, int c)
{
return (a << 20) | (b << 10) | c;
}
Run Code Online (Sandbox Code Playgroud)
稍后提取它们:
void unpack(int combined, int *a, int *b, int *c)
{
*a = combined >> 20;
*b = (combined >> 10) & 0x3ff;
*c = combined & 0x3ff;
}
Run Code Online (Sandbox Code Playgroud)
这种包装是安全的,因为1000小于2 10,所以这些数字总是适合10位.