int 型の変数 -2147483648 に -1 をかけると -2147483648 になるのはなぜか
int a = -2147483648;
int b = a * -1; // -2147483648
32ビットの signed int の値の範囲が
-2,147,483,648 ~ 2,147,483,647
であることから、b の値が +2147483648 になり得ないことは分かります。
ただ、-2147483648 になる理由が分かりません。
C# だけでなく Java などでも同様のようです。
仕様と言ってしまえば、それまでなのでしょうが、何か合理的な理由があるのでしょうか?
a = (a * -1) * -1
という式が成り立つようにするためでしょうか。