- 締切済み
javaのbyte型の整数範囲の考え方
javaのbyte型に格納できる10進数の整数範囲の考え方についてです。 コンピュータ内部で-128がどのように表現されているのかが よく分からないので質問させてください。 byte型(8bit)は-128~127の整数範囲、とあります。 □□□□□□□□(8bit)あって 00000000~01111111が(整数0~+127)を表現。 1番左のビットは符号を表すためのビット(+なら0 -なら1) でよろしいのでしょうか? となると-1は マイナス→10000001(1番左のビットは1でマイナスを表す)でいいのでしょうか? もしこれだと、-128の場合そもそもビットが8個しかないので 11111111だと一番左のビットが1でマイナスを表すとして 残りの7ビット1111111で127を表現しているような気がして、 11111111(8bit)は-127では?と思うんです。 こういうのが詳しく書いてあるサイトなどはないでしょうか? ここでご指導頂ければありがたいです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- gigamac
- ベストアンサー率57% (8/14)
2の補数が存在する事で、足し算だけで引き算を再現できます。 例えば、10 - 1 を計算するとします。 0000 1010 ← 10 1111 1111 ← -1 を足すと、 1 0000 1001 となり桁上がりはしちゃいますけど8bitで考えると9 になります。要は足し算で、引き算をしたことになります。 最上位BITが符号という考えからしてみるとおっしゃる通りでもOK だと思うのですが、2の補数があることで便利になるのです。 これは、CPU(MPU)の構成の話になってしまうのですが、 加算回路だけで引き算もできますし、CPU内部が簡素化されます。 また、CPUは基本、2進数で動作していますので、こういった考え 方が有利な為です。
- sha-girl
- ベストアンサー率52% (430/816)
>11111111(8bit)は-127では?と思うんです。 一般的に11111111(8bit)は-1になります。(ただし処理系に依存) 多くのコンピューターは整数演算に2の補数を使います。 2の補数 http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0 が参考になると思います。