2012-07-15 6 views
7

整数型が範囲外の場合、最大値+ 1が加算/減算されます(範囲内のどの部分に依存するかによって異なります)。 例えば、Cの暗黙の変換は、なぜ動作しますか?

unsigned short num = 65537; 

numが1の値(65536を差し引いた)を有するであろう。 私の質問です:なぜそれが起こるのですか? 私の直感は、最大値は常に1111ですので、キャリーフラグとオーバーフローフラグと関係があることを教えています....

ありがとうございます!符号付き整数のNビットunsigned型に変換するためのルールを2の補数を使用するマシンで

+4

これは切り捨てられます。 – Mehrdad

+0

基本的にすべての可能な警告を有効にしてコンパイルするべき完全な例です。なぜそれが標準になっているのかというと...考えていない:p。 (具体的には1を意味しない限り、それはちょうど2の補数オーバーフローです) – Corbin

+0

このような警告メッセージの例: '警告:暗黙的に符号なし型に切り捨てられた大きな整数' – curiousguy

答えて

7

は、すべてが、下位Nビットを破棄に相当します。一般的なハードウェアでは、これが変換を行う最も簡単な方法です。

標準では、符号付き整数の他の表現を許可しますが、一貫性のために同じ変換規則を使用します。これは、そのようなマシン上でいくつかの余分な作業を必要とするかもしれませんが、(a)そのようなマシンはまれであり、(b)費用はとにかく小さいはずです。

関連する問題