充分利用两个 5 位数字
Making the most out of two 5-digit numbers
不确定这是否是正确的地方,但我相信你们中的一些人能够在以下方面给我一个很好的见解:
考虑 this iBeacon 负载的描述。
据我所知,有一个 UUID 统一了一组信标,'minor' 和 'major' 值区分了该组中的信标。
现在,我想为我的一个应用程序使用 iBeacon 协议。我将不得不使用该 UUID 来唯一标识我的应用程序,只留下 minor 和 major 值以某种方式唯一标识每个 运行 该应用程序的实例。
Minor 和 Major 参数都是
(uint16_t)
我刚刚从评论中了解到是一个介于 0 和 65,535 之间的数字。
如何以最佳方式使用这两个号码来创建尽可能多的唯一号码?
非常感谢您的考虑。
这里要理解的关键是 n
二进制 digits/bits 将允许您表示 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
,即零到七
- 十六位可以表示 2^16 个值,即 0 到 65535
A 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 个不同的数字。
不确定这是否是正确的地方,但我相信你们中的一些人能够在以下方面给我一个很好的见解:
考虑 this iBeacon 负载的描述。 据我所知,有一个 UUID 统一了一组信标,'minor' 和 'major' 值区分了该组中的信标。
现在,我想为我的一个应用程序使用 iBeacon 协议。我将不得不使用该 UUID 来唯一标识我的应用程序,只留下 minor 和 major 值以某种方式唯一标识每个 运行 该应用程序的实例。
Minor 和 Major 参数都是
(uint16_t)
我刚刚从评论中了解到是一个介于 0 和 65,535 之间的数字。
如何以最佳方式使用这两个号码来创建尽可能多的唯一号码?
非常感谢您的考虑。
这里要理解的关键是 n
二进制 digits/bits 将允许您表示 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
,即零到七 - 十六位可以表示 2^16 个值,即 0 到 65535
A 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 个不同的数字。