私のアプリケーション データの一部には、9 つの 3 進数 (base-3) の「ビット」のセットが含まれています。データベースのデータをコンパクトに保つために、そのデータを単一の短いものとして保存したいと思います。3^9 < 2^15 であるため、9 桁の 3 進数を短縮形で表すことができます。
私の現在の方法は、長さ 9 の文字列として処理することです。任意の数字をインデックスで読み取ったり設定したりできます。これは便利で簡単です。ただし、それを short に変換するために、現在、手動で (シフト加算ループを使用して) base 10 に変換し、次に Int16.Parse を使用してバイナリ short に変換しています。格納された値を基数 3 の文字列に戻すには、プロセスを逆に実行します。これにはすべて時間がかかるため、可能であれば最適化したいと考えています。
私がやりたいことは、常に値を short として保存し、3 進数のビットを読み取って設定することです。理想的には、バイナリから個々の数字を取得して設定する関数が必要です。
いくつかのビット シフトと mod 関数で遊んでみましたが、これを行う正しい方法が思い浮かびませんでした。完全な変換を行わずにそれが可能かどうかさえわかりません。
これに役立つビット単位の算術魔法を教えてくれる人はいますか?