题
我知道你可以将二次幂的数字分成两半:
halfintR = some32bitint & 0xFFFF
halfintL = some32bitint >> 16
对于一个由两个空间的非幂次限定的整数,你能做同样的事吗?
(假设你希望你的范围被限制为适合4位数字的52位空格的整数集合)
解决方案
您可以使用以下
rightDigits = number % 2704 // 52 squared
leftDigits = number / 2704
其他提示
嗯,当然。 <代码>&安培; 0xffff 与%0x10000
和&gt;&gt;相同16
与 / 0x10000
相同。只有在使用移位和屏蔽等位操作完成时,除以2的幂才能更有效率。分部适用于任何数字(在代表范围内)。
一旦您意识到&amp;
和&gt;&gt;
用于执行 modulo
和 division
分别计算,你可以写出你想要的东西:
lower = some4DigitsNumberBase52 % (52 * 52)
upper = some4DigitaNumberBase52 / (52 * 52)
这是进行基础计算的基础。您还可以从算法中导出解决方案,该算法在特定基数中显示数字:您如何得出最右边的两位数字和最左边的2位数字。
不隶属于 StackOverflow