所以他们说的是你需要将两者混合起来,就像这样:
//for reference, this is 32 bits
12345678901234567890123456789012
000000000000000000000FirstValueA
000000000000000000000FirstValueB
它说的是我们需要将两者结合起来。它说A是低阶,B是高阶。
让我们参考维基百科的http://en.wikipedia.org/wiki/Least_significant_bit并查看low order is on the --> right
, 和high order is on the <-- left
.
low order -> right
high order <- left
A -> right
B <- left
所以我们最终会得到(我们之前的例子)
//for reference, this is 32 bits
12345678901234567890123456789012
000000000000000000000FirstValueA
000000000000000000000FirstValueB
变成
//for reference, this is 32 bits
12345678901234567890123456789012
000000000000000000000FirstValueB000000000000000000000FirstValueA
现在,如果值如下所示,那将不起作用:
//for reference, this is 32 bits
12345678901234567890123456789012
1001101100110100101011010001010100101000010110000101010011101010
//the above string of 1's and 0's is more correct for the example
你得到的不是两个二进制字符串,而是两个整数。因此,您必须将左侧值乘以 2**32 并将其添加到右侧值。(顺便说一下,这是一个 64 位字段)
让我们检查一下,为什么低位在右边而高位在左边:
二进制就像阿拉伯数字一样书写。在阿拉伯数字中,数字:
123456
意思是十二万三千,四百五十六。10 万是最重要的部分(因为我们会将其缩短为“略超过 10 万美元”而不是“超过 6 美元”),而 6 是我们最自由放弃的部分。所以我们可以说这个数字是:
123 是包含高位的值,456 是包含低位的值。在这里,我们将乘以 10^3 将它们相加(这是一个数学事实,而不是猜测,所以相信我),因为它看起来像这样:
123
456
所以同样适用于二进制文件:
//for reference, this is 32 bits
12345678901234567890123456789012
000000000000000000000FirstValueB
000000000000000000000FirstValueA
tl;博士:
将 B 乘以 2^32 并添加到 A