7

整数が型の範囲外の場合、最大値 + 1 が加算または減算されます (数値が範囲のどの部分であったかによって異なります)。例えば、

unsigned short num = 65537;

num の値は 1 になります (65536 が減算されます)。私の質問は:なぜそれが起こるのですか?私の直感では、最大値は常に 1111 であるため、キャリー フラグとオーバーフロー フラグに関係があることがわかります....

前もって感謝します!

4

1 に答える 1

7

符号付き整数に 2 の補数を使用するマシンの場合、Nビットの符号なし型への変換規則は、下位Nビットを除くすべてを破棄することと同じです。通常のハードウェアでは、これが変換を行う最も簡単な方法です。

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

于 2012-07-15T08:37:22.007 に答える