0

まあ、論理的にそれを行うことはできますが、それを行うための数学的操作または式があるに違いありません。存在しますか?はいの場合、それは何ですか?

アルゴリズムは次のとおりです。

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

私が欲しいものを明確にしましょう:

150 ビットの場合、3 つの 64 ビット long が必要です。もちろん、2つでは128ビットしか得られません。それが最初の計算です。

2 番目の計算は、常に実行されるためさらに重要ですが、ビット位置から long に移動することです。例えば:

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

この情報を取得するための数式および/またはビット演算は何ですか?


わかりました、以下の回答から、ビット位置からロングに移動するように見えます。使用するだけです:

ロングポジション = ビットポジション / 64

続きはこちら: 2 のべき乗のときに除算をビット単位のシフトに変換する方法は?

4

1 に答える 1

5

コードを次のように単純化することはできますが、それを実行するための組み込み関数があるとは思いません。

return (size + 63) / 64;
于 2012-12-09T04:12:08.077 に答える