如何计算存储N位所需的long(64位)数?

时间:2012-12-09 04:07:11

标签: java algorithm bit-manipulation bitwise-operators

嗯,我可以通过逻辑做到这一点,但我打赌有一个数学运算或表达式来做到这一点。有人存在吗?如果是,那是什么?

以下是算法:

private int calcNumberOfLongs(int size) {
    if (size % 64 == 0) {
        return size / 64;
    } else {
        return size / 64 + 1;
    }
}

让我清楚我想要的东西:

对于150位,我需要三个64位长。两个当然只给我128位。这是第一次计算。

第二个计算,这一个更重要因为它将一直执行,是从位位置变为长位。例如:

bit 5 -> first long
bit 64 -> first long
bit 65 -> second long
bit 140 -> third long

获取此信息的数学表达式和/或按位运算是什么?


好的,从下面的答案来看,它似乎从位位置变长,我们只是使用:

多头头=头位/ 64

延续时间在此处:How to turn a division into a bitwise shift when power of two?

1 个答案:

答案 0 :(得分:5)

虽然您可以将代码简化为:

,但我认为没有内置函数可以执行此操作
return (size + 63) / 64;