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

chr*_*tek 0 java algorithm bit-manipulation bitwise-operators

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

这是算法:

private int calcNumberOfLongs(int size) {
    if (size % 64 == 0) {
        return size / 64;
    } else {
        return size / 64 + 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

让我清楚我想要的东西:

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

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

bit 5 -> first long
bit 64 -> first long
bit 65 -> second long
bit 140 -> third long
Run Code Online (Sandbox Code Playgroud)

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


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

多头头寸=比特头寸/ 64

延续在这里:如何在2的幂时将除法变为按位移位?

Pet*_*erJ 5

尽管您可以将代码简化为:我不相信有内置函数可以执行此操作:

return (size + 63) / 64;
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是一个在分配缓冲区等的代码中经常需要的表达式.很高兴熟悉它.通用是`(size + GRANULE_SIZE - 1)/ GRANULE_SIZE` (2认同)