给定两个GUID,A和B,我执行C = A ^B。结果是GUID吗?
(如果是这样,我可以使用它代替生成第三个guid来表示包含由A和B表示的两个对象的对象。)
GUID只是0到2 128-1范围内的统一随机数。从理论上讲,没有什么可以保证它们是唯一的,但是正如这个问题清楚地表明的那样,由于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)的可能性相同。
该规则的唯一例外是,如果两个源GUID之一全为零,则导致结果XOR与另一个GUI产生冲突。
请注意,XOR不是唯一具有此功能的操作-添加两个GUID并截断溢出位也会生成一个GUID。