サインドオーバーフロー (Signed Overflow) とは、 符号付き整数の加算/減算時に、結果が意図した符号とは 逆の符号を指す時の状態のことを指す。
CPU のレジスタのサイズが固定になっていて、 負の整数の表現に 2 の補数表現を使うために このようなことが起きる。
1 つ目の整数 : 0x7F (127) 2 つ目の整数 : 0x01 (1)
0x7F + 0x01 = 0x80
一見正しそうに見えるが、0x80 (2 進数で 1000 0000) は、 最上位ビットに 1 が立っているため、符号付き整数の場合は負の数となる。 よって、128 ではなく、-128 となる。 (符号無し整数の場合は 128 を表現できる。 また、符号が無いため、サインドオーバーフロー自体が起こらない)
これは、8 ビットの符号付き整数の範囲が -128 ~ 127 に限られているために起こる。
16 ビット単位で符号付き整数を加算できる場合、 0x7F + 0x01 は 128 となり、サインドオーバーフローは起こらない。 16 ビットの符号付き整数の範囲は -32768 ~ 32767 なので、 この場合は、結果が 32767 を超える時に起こる。