|3-2147483648の2の補数が、同じバイナリ列になってしまうからです。アーキテクチャにおいて、負の値は2の補数で表現します。符号反転演算は2の補数を求めて算出する実装になっています。結果、ある値の2の補数が元の値と同じバイナリ列になってしまう値があります(0と-2147483648の二つ)。この値については、符号反転演算をすると元の値になってしまうので、-1をかけても値が変わらないという現象が起きます。なる理由が分かりません。型の計算でオーバーフローしているからです。