给定两个 GUID,A 和 B,我执行 C = A ^ B。结果是 GUID 吗?
(如果是这样,我可以使用它而不是生成第三个 guid 来表示包含由 A 和 B 表示的两个对象的对象。)
最佳答案
GUID 只不过是 0 到 2128 - 1 范围内的统一随机数。从理论上讲,没有什么可以保证它们是唯一的,但如 this question敏锐地表明,由于发生碰撞的可能性极低,GUID 在实践中是独一无二的。
鉴于只需要满足两个要求:1)范围和 2)均匀随机性,很容易证明两个 GUID 的 XOR 确实是一个 GUID。
想象一下,如果 GUID 只有两位,那么我们可以检查所有可能的场景:
^ 00 01 10 11
00 00 01 10 11
01 01 00 11 10
10 10 11 00 01
11 11 10 01 00
所有可能的结果 1) 具有相同的范围 00 到 11,并且 2) 发生的可能性相同。
此规则的唯一异常(exception)是如果两个源 GUID 之一全为零,则导致生成的 XOR 与另一个产生冲突。
请注意,XOR 不是唯一具有此功能的操作——添加两个 GUID 并截断溢出位也会产生一个 GUID。
关于math - 通过异或将两个 GUID 组合起来的结果是否满足成为 GUID 的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21241511/