仕様で明示的に許可されている三元マシンでエミュレートできるため、受け入れられた回答には同意しません。
§ 3.9.1/4 符号なしと宣言された符号なし整数は、モジュロ 2 nの算術法則に従うものとします。ここで、n は整数の特定のサイズの値表現のビット数です。
§ 1.8/5 簡易コピー可能または標準レイアウト タイプ (3.9) のオブジェクトは、ストレージの連続したバイトを占有するものとします。
§ 3.9/9 算術型 (3.9.1)... をまとめてスカラー型と呼びます。スカラー型、... そのような型の配列... はまとめて POD 型と呼ばれます。スカラー型...、そのような型の配列... は、まとめて自明にコピー可能な型と呼ばれます。
§ 3.8/2 自明にコピー可能な type のオブジェクトについてT
は、オブジェクトが type の有効な値を保持しているかどうかにかかわらず、オブジェクトを構成する基礎となるバイトをまたはT
の配列にコピーできます。char
unsigned char
. char
またはの配列の内容がunsigned char
オブジェクトにコピーされた場合、オブジェクトはその後元の値を保持します。
ここでの問題は、すべての時点で、自明にコピー可能なすべてのマルチバイト オブジェクトの状態が、配列にコピー可能であり、char
失われることなく元に戻されなければならないことです。これは、基数 2 のマシンをエミュレートする 3 進マシン (モジュロ「ロールオーバー」を持つ基本的な算術型で必要とされる) が、すべての符号なしマルチバイト算術演算で、エミュレートされた各バイトから次のバイトへのロールオーバーをエミュレートする必要があることを意味します。
これでも 3 進マシンでゆっくりとエミュレートできますが、すべてのプリミティブ型が正確に 41 トリットで構成されている場合、コンパイラが心配しなければならないのは符号なしロールオーバー/アンダーだけであり、実行可能かもしれません。^
(明らかに、|
をエミュレートするのも遅いですが、それは私の考えではそれほど問題ではありません)それは可能&
だと思いますが、標準に準拠した C++ コンパイラを三元マシン用に作成することは驚くほど非現実的です。