質問: ### 前提・実現したいこと ここに質問したいことを詳細に書いてください (例)PHP(CakePHP)で●●なシステムを作っています。 ■■な機能を実装中に以下のエラーメッセージが発生しました。 ### 発生している問題・エラーメッセージ ``` 数値のデータ型について質問です。 例えば1byteは1バイトに相当して、対応できる範囲は-128~127と記載されていました。 僕は1byteは00000000となっていて八桁目でプラスかマイナスを出力し、残りの七桁以下で数値の大きさを決定していると考えてしまいました。しかし、そうすると数字の範囲は-127~127が妥当だと思いました。 質問は、何故-127ではなく-128なのでしょうか。教えてください。 ``` ### 該当のソースコード ``` ここにご自身が実行したソースコードを書いてください ``` ### 試したこと 課題に対してアプローチしたことを記載してください ### 補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報
回答: Javaを含め、多くのプログラミング言語では、負の整数について**2の補数表現**をとっています。これは、正の数のビットを反転させて、1を足したものです。 * 127...0111 1111 * (中略) * 1...0000 0001 * 0...0000 0000 * -1...1111 1111 * -2...1111 1110 * (中略) * -128...1000 0000 この「2の補数表現」を取ることのメリットとしては、 * ゼロの表現が1通りしかない(一方で、浮動小数点数として一般的なIEEE 754には、「-0」なる数が存在します) * 負の数と正の数の足し算がそのままできる などがあります。負の数では0がないので、正の数より1つ絶対値が大きいところまで取れます。