エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
ここにツイート内容が記載されます https://b.hatena.ne.jp/URLはspanで囲んでください
Twitterで共有ONにすると、次回以降このダイアログを飛ばしてTwitterに遷移します
C言語の符号付き整数の足し算、引き算、掛け算は「2^nを法とするモジュラー演算である」と説明されるこ... C言語の符号付き整数の足し算、引き算、掛け算は「2^nを法とするモジュラー演算である」と説明されることがありますが、これは間違いです。正しい説明は、「C言語の符号付き整数のオーバーフローは未定義動作である」となります。 この違いが観測できる例を2つ紹介します。 まず、単項マイナスについて。以下のプログラムを考えます: #include <limits.h> #include <stdbool.h> #include <stdio.h> bool f(int x) { return x == -x; } int main() { printf("%s\n", f(INT_MIN) ? "true" : "false"); } int 型の単項マイナスが2^nを法とするモジュラー計算で行われるのであれば、f が true を返す x は 0 と INT_MIN の2つのはずです。ですが、実際に