【发布时间】:2009-06-17 13:43:27
【问题描述】:
我知道你可以像这样将一个二的幂数分成两半:
halfintR = some32bitint & 0xFFFF
halfintL = some32bitint >> 16
你能对一个以非两个空间的幂为界的整数做同样的事情吗?
(假设您希望将您的范围限制为适合 4 位基数 52 无符号空间的整数集)
【问题讨论】:
标签: math bit-manipulation
我知道你可以像这样将一个二的幂数分成两半:
halfintR = some32bitint & 0xFFFF
halfintL = some32bitint >> 16
你能对一个以非两个空间的幂为界的整数做同样的事情吗?
(假设您希望将您的范围限制为适合 4 位基数 52 无符号空间的整数集)
【问题讨论】:
标签: math bit-manipulation
你可以使用以下
rightDigits = number % 2704 // 52 squared
leftDigits = number / 2704
【讨论】:
嗯,当然。 & 0xffff 与% 0x10000 相同,>> 16 与/ 0x10000 相同。只是在进行移位和屏蔽等位操作时,除以 2 的幂更有效。除法适用于任何数字(在表示范围内)。
【讨论】:
一旦你意识到& 和>> 分别用于进行modulo 和division 计算,你就可以写出你想要的:
lower = some4DigitsNumberBase52 % (52 * 52)
upper = some4DigitaNumberBase52 / (52 * 52)
这是进行基数计算的基础。您还可以从以特定基数显示数字的算法得出解决方案:您如何得出最右边的两位数字和最左边的两位数字。
【讨论】: