クイズ
マイナスをとっても符合が変わらない数字を2つ答えなさい。
ヒント:数学ではなく、プログラミングのカテゴリなのがポイントです。
答え:
- 0
- 2の補数表現の負の最大値。
解説(というなの弁解)
x = -x となるxは0だけですから、0は自明で、それ以外には数学的には存在しません。
ただし、コンピュータの整数は一般的には2の補数表現で表されます。
このときマイナスをとるという演算はビット否定に1を足すという演算に
置き換えられるので、負の最大値のマイナスをとっても同じ数字になります。
例:8bitの場合の計算
1000 0000 = -128 = 負の最大値
0111 1111 = 127 = 正の最大値
1000 0000 = オーバーフローしてマイナスに。
#include <iostream> main(){ int a = std::numeric_limits<int>::min(); std::cout << a << '\n'; std::cout << -a << '\n'; } 結果(32bitCPUの場合) -2147483648 -2147483648
コンピュータの数学ってのもなかなか難しいですね。