KDOC 563: キャリーフラグは桁あふれ、オーバーフローフラグは符号の誤りで立つ
この文書のステータス
- 作成
- 2026-05-14 貴島
- レビュー
- 2026-05-14 貴島
概要
- キャリーフラグはCPUが演算の結果、ビット幅を超えた桁上がり/下がりが発生したときに立つ
- オーバーフローフラグはCPUが演算の結果、結果の符号が正しくなくなったときに立つ
CPU側では同じ演算で両方のフラグを同時に計算し、レジスタの別のビットに保存する。アプリケーションは演算を符号なし/符号付きと扱うかで、どちらのフラグを参照するか変わる。
200 + 100 (8ビット)を例に説明する。
- 符号なし: 255を超えたのでキャリーフラグが立つ
- 符号付き: 200は-56、100は100、-56+100=44で符号は正しい。オーバーフローフラグは立たない
関連
抽象。
- 同じ計算結果でも、どう解釈するかで見るべき指標が変わる
関連。
- 前提: KDOC 144: RISC-V 32ビットのCではintとfloatは4バイト、doubleは8バイト、charは1バイト。ビット幅が扱える値の範囲を決めること
- 具体例: KDOC 312: Cではchar同士の演算も汎整数拡張でintとして計算される。同じ計算結果200が、符号付きの8ビットに入れると-56になる例
- 類推: KDOC 454: シェルでバイナリが文字列表示されるのはなぜか?。同じビット列でも、受け手の解釈で意味が変わる例