Math 充分利用两个5位数字
我不确定这是不是一个合适的地方,但我相信你们当中有人能够让我对以下方面有很好的了解: 考虑iBeacon有效负载的描述。 据我所知,有一个统一一组信标的UUID,还有一个区分该组信标的“次要”和“主要”值 现在,我想为我的一个应用程序使用iBeacon协议。我必须使用UUID来唯一标识我的应用程序,只留下次要值和主要值来以某种方式唯一标识该应用程序的每个运行实例 次要和主要参数都是 (uint16_t) 我刚刚从评论中了解到,这是一个介于0和65535之间的数字 如何以最佳方式使用这两个数字来创建尽可能多的唯一数字?Math 充分利用两个5位数字,math,uuid,Math,Uuid,我不确定这是不是一个合适的地方,但我相信你们当中有人能够让我对以下方面有很好的了解: 考虑iBeacon有效负载的描述。 据我所知,有一个统一一组信标的UUID,还有一个区分该组信标的“次要”和“主要”值 现在,我想为我的一个应用程序使用iBeacon协议。我必须使用UUID来唯一标识我的应用程序,只留下次要值和主要值来以某种方式唯一标识该应用程序的每个运行实例 次要和主要参数都是 (uint16_t) 我刚刚从评论中了解到,这是一个介于0和65535之间的数字 如何以最佳方式使用这两个数字来创
非常感谢您的考虑。这里要理解的关键是,拥有
n
二进制数字/位将允许您表示2^n
不同的数字。一位用于表示两个值(0或1)。每增加一位,您可以表示的数量就会增加一倍
- 一位允许您表示两个(2=2^1)值,
0
,即0:11
- 两位用于表示四个(2*2=2^2)值,
00
01
10
,即0到311
- 三位给你八(2*2*2=2^3)个值,
000
001
<代码>110010
,即0到7111
- 16位用于表示2^16个值,即0到65535
uint16\u t
为您提供16位,因此您可以表示的数字量固定为2^16
两个uint16\u t
将为您提供32位可供使用,这使您可以表示2^32=4294967296=大约40亿个不同的数字
没有聪明的方法将比特拼接成更小的块来增加这个数字。如果我把16位分成10位部分和6位部分,10位部分会给我2^10个数字,6位部分会给我2^6个数字。总的来说,这仍然是(2 ^ 10)*(2 ^ 6)=2 ^(10+6)=2 ^ 16不同的数。我认为你应该用二进制而不是十进制来考虑这些数字。对于16位二进制数字/位,可以表示0到65535的值。用32位你可以表示这个数字的平方,我认为大约是40亿。但是,同样,99999*99999=9.999.800.001你不能使用99999,因为uint16_t的最大值是65535。@Sjakelien,没有直接的方法来判断给定数量的二进制数字可以表示多少个十进制数字。a
uint16\u t
不是指5位十进制数字(0到99999),而是指2^16个不同的数字(0到65535)。最后,有固定数量的值可以用32位表示。没有聪明的方法将它们拼接成更小的块来增加这个数字。一位给出两个可能的值(0或1),之后的每一位都将使之前可以表示的值加倍。@Sjakelien,这是正确的。按照网站的表述方式,主值可能允许您使用一个uint16\t
标识最多2^16个不同的商店,次值允许您使用另一个uint16\t
标识给定商店中最多2^16个不同的节点。总的来说,这是(2^16)*(2^16)=2^32=大约40亿个唯一标识符。