Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ビット演算子(~)について

ビット演算子(~)で解らない事があるのでお願いします。

NOT演算(~)は入力されたビットを反転して出力する演算という事は何とか解ったんですが。

public class Sample {
 public static void main(String[] args) {
  byte b1 = 3;
  byte b2 = 9;
  int i = ~b1;

  System.out.println("iの値は " + i + " です。");
 }
}

上記のソースを実行すると下記のように結果が出力されました。
iの値は -4 です。

b1は「00000011」なので反転すると「11111100」ですよね?
なぜ「11111100」が-4になるのかが解りません。

くだらない質問かもしれませんがアドバイス宜しくお願いします。

3

回答

4290

閲覧

3件の回答

評価

0

「2の補数」をキーワードに、調査なり勉強なりしてみましょう。

評価

0

2の補数か、またはそれ以前に負の数の二進数表現だな。

評価

0

コンピュータにはマイナスの概念がないので
2の補数表現というもの使って、人為的にマイナスを作り上げています。

イメージとしては、決まったデータ域のうち半分をマイナス側として、もう半分をプラス側として使うということです。

たとえばいま問題に挙げている8ビットであれば
256を表現する変わりに-128〜127まで表現できるようになります。

調べればどこにでも書いてあるので、
2の補数表現を勉強して、なぜ「11111100」が-4になるのか考えてみてください。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。