私は値の範囲を表す方法を探しています: 0 - 18446744073709551615 8バイト未満です。ビット数を減らした符号なしqword(64ビット)の値の範囲は?
私はいくつかの方法を考えようとしましたが、何もできません。 理論上は、次のようになります。 1バイトを使用して少なくとも2バイトのビットシーケンスを表します。 しかし、2バイトには65536通りのビットの組み合わせがありますが、1バイトでは0-255(256通り)の値しか得られません。
おそらく、ビットの意味を変更するのが最善の方法です。それは問題ありませんが、精度の低下はありません。
私は、単純には考えられないようになっていますが、私は他の人の意見や理論を問題にしたいと思っています。
2つのルールがあります。 #1精度が低下することはありません(つまり、0〜18446744073709551615の数値はすべて表現可能でなければなりません)。 #2標準の64ビット形式からの変換では、7バイト(56ビット)以上が必要になることはありません。
これらのルールは、これを特に困難にします。
すべての2^64の数字は、すべての表現でなければならない場合、あなたは完了です。 63ビットはその半分しか表現できません。 63ビットの圧縮された値のすべてを解凍すると、64ビットの値の半分になります。簡単なカウント。 56ビットは数字の1/256しか表現できません。あなたは64ビットが必要です。期間。 –