どのように検出エンコーディングに署名の整数で。
-
26-09-2019 - |
質問
ISO C標準では三つのエンコード方法のための署名の整数二つの補、の補サイン/大きくなりました。
ぞれが様々な表情を見せる効率の高いあるいは良い方法を検出するエンコード実行時(またはその他の時間があればより良い解決)?知りたいことだったので市場に出す前に指令に適合しbignum図書館に異なる可能性が広がる。
Iプランの計算ことで格納する変数のプログラムでする必要はありませんblindingly速いと仮定して、エンコードは変わらないと思いますのプログラム実行します:-)
解決
すでに申し出なければならない低ビットの定 -1
のようにな -1 & 3
.この評価
- サ模
- しのための補完、
- 二のを引き立てます。
べきであることができるかもしいプリプロセッサの表現内 #if #else
を構築します.
他のヒント
1の補数を検出することは非常に単純でなければなりません - if (-x == ~x)
のようなもの。 if (-x == ~x + 1)
:2の補数を検出することだけでは簡単のようであるべきです。それはどちらもそれらのだしない場合、それは、符号/大きさにする必要があります。
なぜコンパイル時にそれをしませんか?あなたは、必要であれば、ビルドスクリプト/メイクコンパイルAテストプログラムを持っていますが、その後、条件付きコンパイルを行うには、プリプロセッサを使用することができます。これはまた、それだけではなく、実行に一回以上、コンパイルごとに一度実行されるため、パフォーマンスは、のの多くはそれほど重要であることを意味します。
独特のビットパターンを示すだろうint型へのポインタを取得します。 unsigned int型へのポインタとしてキャストした後、ビット値を検査します。
あなたが欲しいものを行う必要があり、慎重に選択された値のカップルでこれをやってます。
私はあなたがそれを保持し、見つけるために様々な表現を持つ配列を比較するint
配列に十分な大きさにchar
として負の数を格納したいと思います。
しかしオム...符号なし整数は符号を持つべきではない、彼らのですか?