充分利用两个5位数字

时间:2015-01-27 20:26:42

标签: math uuid

不确定这是否是正确的地方,但我相信在你们中间有人能够给我一个很好的见解:

考虑iBeacon有效负载的this描述。 据我所知,有一个UUID可以统一一组信标,还有一个' minor'和'主要'区分该组内信标的值。

现在,我想将iBeacon协议用于我的某个应用程序。我必须使用该UUID来唯一标识我的应用程序,只留下次要主要值,以某种方式唯一标识该应用程序的每个运行实例。

次要主要参数都是

  

(uint16_t)

我从评论中理解的是0到65,535之间的数字。

如何以最佳方式使用这两个数字来创建尽可能多的唯一数字?

非常感谢你的考虑。

1 个答案:

答案 0 :(得分:1)

这里要理解的关键是,使用n二进制数字/位将允许您表示2^n个不同的数字。一位可以表示两个值(0或1)。每增加一位,就可以将之前代表的金额翻倍。

  • 一位允许您代表两个(2 = 2 ^ 1)值,0 1,即零到一
  • 两位可让您表示四个(2 * 2 = 2 ^ 2)个值,00 01 10 11,即零到三
  • 三位给出八个(2 * 2 * 2 = 2 ^ 3)个值,000 001 010 ... 110 111,即零到七
  • 16位允许您表示2 ^ 16个值,即0到65535

uint16_t为您提供16位,因此您可以表示的数字量固定为2 ^ 16。

两个uint16_t将为您提供32位,这可以让您代表2 ^ 32 = 4,294,967,296 =大约40亿个不同的数字。

没有聪明的方法可以将比特拼接成更小的块,从而增加这个数量。如果我将16位分成例如10位部分和6位部分,则10位部分将给出2 ^ 10个数字,6位部分将给出2 ^ 6个数字。总的来说,这仍然是(2 ^ 10)*(2 ^ 6)= 2 ^(10 + 6)= 2 ^ 16个不同的数字。