Int32
値の範囲 (25 ~ 50 または 100 ~ 200 など) を保存する必要がありますが、多くのデータベースの再設計やその他の作業を避けるために、これらの両方の数値を保存するために単一を使用したいと考えています。その場合、各数値に16ビットしかないことに気づきましたが、それで問題ありません。
したがって、2 つの整数値を使用すると、これは非常に簡単になります。私は次のようなことができます:
int mask = 50; //Right bits will have 50
mask |= (25 << 16); //Left bits will have 25
Console.WriteLine("Mask is: {0}", mask);
Console.WriteLine("Left is: {0}", (mask >> 16));
Console.WriteLine("Right is: {0}", (mask & 0xFFFF));
これで、右の 16 ビットに値 50 が格納され、左の 16 ビットに値 25 が格納されます。
それで、質問は何ですか?
今、同じ手法を使用したいのですが、2 つの非整数を格納したいと考えています。たとえば、1.5 と 1.75、または 2.00 と 2.25 です。float
.NET は、、、またはsingle
のビット シフト演算子をサポートしていないようです。 さらに、これらの値も最終的に Javascript で読み取る必要があるため、使用するビット エンコーディングの浮動小数点がプラットフォーム間で完全に互換性があるかどうかは疑わしいです。double
decimal
これを行う最善の方法は何ですか?私が検討しているアプローチの 1 つは、整数を使用するだけで、すべてを 1000 で割ることです。これにより、両方の数値で小数点以下 3 桁の精度が得られますが、long
65 を超えるものを格納するには、すべてを として格納する必要があります。ただし、これが最善のアプローチであるかどうかはわかりません。たぶん、私が見逃している簡単なものがあります。