宿題として c++ 任意整数ライブラリを作成しています。数値を基数 10^n の unsigned int のベクトルとして内部的に表現しました。ここで、n は 1 つの unsigned int 数字に収まる範囲で可能な限り大きくします。
この選択は、スペース、パフォーマンス、数字アクセスの間のトレードオフとして行いました (人間が読める文字列に変換する際に複雑さを加えることなく、基数 10 を使用するよりもはるかに優れたパフォーマンスを得ることができます)。
たとえば、次のようになります。
base10(441243123294967295) 18桁
base1000000000(441243123,294967295) 2桁(カンマ区切り)
uint32 による内部表現
[00011010 01001100 11010101 11110011] [00010001 10010100 11010111 11111111]
宿題を完了するには、ビット シフトとその他のビット単位の演算子を実装する必要があります。そのような内部表現を持つ数値のシフトを実装することは理にかなっていますか?
内部表現のすべてのビットが有効になるように、基数 2^n に変更する必要がありますか?