• 締切済み

NOT演算

~=NOT演算 Javaプログラムで 44をNOT演算で実行すると-45 という結果が得られますが、なぜそのようになるのかがわかりませんので教えてください。

みんなの回答

回答No.4

#3さんが解説しているとおりですね。 最近の学生さんはビット演算や2の補数とかは習わないのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.3

NOT演算とはビット演算の1つで、各ビットを反転する演算です。 ビット演算を理解するには2進数を理解していないといけませんが・・・。 1バイト(8ビット)の範囲は、 0111 1111 (10進数だと127) 0111 1110 (10進数だと126) … 0000 0000 (10進数だと0) … 1000 0001 (10進数だと-127) 1000 0000 (10進数だと-128) になります。 ちなみに先頭の "1" は負の符号(-)を表します。まあ、符号なしっていうのもありますが・・・。 さて、質問にある44という数値は上記の書き方だと "0010 1100" になります。 NOT演算はビットを反転する(0は1に、1は0になります)ので、NOT演算を行うと "1101 0011" になります。これは10進数では-45になります。 なぜ"0010 1100"が10進数だと44、"1101 0011"が10進数だと-45になるかはご自分でお調べ下さい。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

「00101100」 は10進数でいくつでしょう?

noname#105606
質問者

補足

44ですよね?

全文を見る
すると、全ての回答が全文表示されます。
  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

Javaがどうしているかは知りませんが、質問の内容を 読む限り、全てのビットを反転しているのだと思いま すけど。 全てのビットを反転すると プラスの場合、マイナスにして-1 マイナスの場合、プラスにして-1 になります。マイナスが2の補数だからです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ビット演算について

    プログラムを実行した結果が、 10101010 × 11001100 = 10011001 (=の右辺は、演算方法として×の左辺と右辺のNOT XOR、演算処理は1行で行う。) と表示できるプログラムを作成したいのですがよくわかりません。 どなたか教えていただけないでしょうか?よろしくお願いします。

  • この演算子は何の演算子でしょうか?

    下記のようなjavaコードがあります。 int mode = 1; if (true) mode|= 2; System.out.println(mode); これを実行すると結果は3になりますが、 ここで「|」とは何でしょうか? 恥ずかしいですが、 javaを1年半くらいやってきましたけど こんな演算子初めて見ます。 結果からみると 「mode|= 2」が「mode+= 2」と同じになりますが、 「+=」と「|=」は同じものでしょうか?

  • 算術演算子について

    Javaプログラミングを勉強し始めたばかりの初心者で、極々初歩的な質問でお恥ずかしいのですが 算術演算子について、教えてください。例えば、0 % 4 を実行すると結果は、0 となります。これは余りが無いので、 0 という結果になるのだろうと思います。次いで、1 % 4 を実行すると結果は 1 と表示されます。なぜ 1 となるのですか?(計算機で計算すると0.25です。)因みに 2 % 4 は 2 となります。 何方か、わかり易くご教授頂ければ、幸いです。

  • not演算子についてなんですけど

    つまらない質問ですみません。 char x,y; x = 0x01 + 0x00 + 0x04 + 0x03 + 0x02;    y = ~x; printf("%x\n", x); printf("%x\n", y); これを実行したところ xにはaと表示されたんですが、yにはfffffff5と表示されました。 なぜ「fffffff5」なんでしょうか?ただの「5」だと思うんですけど。 xは2進数で1010で、yはnot演算子より0101になるので 16進数では5ではないんでしょうか・・・? 変な質問ですみません。 お願いします。。。

  • & 演算子について教えてください

    こんにちは & 演算子はアドレスを求めるものですが、これはアセンブラ出力したものと同じでしょうか それとも、プログラムの実行時のアドレスを求めているのでしょうか よろしくお願い致します

  • 論理演算 NOT(0101 0101)

    こんにちは、コンピュータの論理演算の勉強をしています。以下も問題に対する答えはあっていますでしょうか? 1.NOT(01010101)=10101010   2進数 2.{(7B7C) Or (6C96)}= ??   16進数 ご存知の方がいましたら教えてください。

  • 浮動小数演算は実行環境の変化に応じて異なる結果に?

    プログラム(C++)について質問があります. 浮動小数演算を用いると,実行環境の変化に応じて結果が変わってしまうのでしょうか? プログラム中ではdouble演算を頻繁に用いています. (ソースコードは膨大すぎるため,申し訳ありませんが載せることが出来ません.) 小数演算をするために何気なくdouble(もしくはfloat)を使っていました. しかし,コンパイル後の実行ファイルを実行する環境に応じて結果が変わってしまうのでは・・・と思い始めました. そこで,ご質問なのですが, ・浮動小数を扱うと,実行環境(プロセッサ?)に応じて,結果は変わってしまいますか? また,もし誤差が生じてしまうならば,何か対処する方法はありますでしょうか? (整数演算にしろ!・・・と言うのは無しにさせて頂きます.) 初歩的な質問だと思いますが,宜しくお願い致します.

  • Javaで四則演算をしたい

    Javaで四則演算をおこなうプログラムを組みたいのですが. オプション機能をつかって *********** java Calc [-options] N1 N2... java Calc -m 4 2 4 6 8 20.0 ******* という風に-mは[-m 4]でまえから4文字を読み取り,加算するプログラムにしたいのです. どなたか助言お願いします.

  • プログラムの演算時間を調べたいのですが(初心者)

    #include  <stdio.h> main() {   double i,wa;   wa=0;   for( i = 0;i<=10000;i++){       }     printf("wa=%d\n",wa) } というプログラムを作ったのですが、このプログラムを実行させて、結果が出るまでにどれだけ演算に時間を使ったのかを知りたいのですが、どうすればいいのかがわかりません。プログラムの中に何か関数を入れることによってできるのですか?

  • Access演算コントロールについて

    Accessの演算コントロール(演算列)で以下を行いたいと思っております。 ■条件 (1)フラグの立っている列のみ演算対象。無い場合はnull値を返す。 (2)フラグの立っている列:次回(カレントレコード)以降、 何回目のテストで今回の平均値を上回るかを演算フィールドに返す (3)テーブル名 テストM ID 教科 点数 平均点 フラグ 演算 1 国語  45   42   0   null 2 国語  40   43   0   null 3 国語  60   80   1   4  ・・・以降4回目のテストで今回の平均値を上回る 4 国語  30   45   0   null 5 国語  55   55   1   1  ・・・次回のテストで今回の平均値を上回る 6 国語  70   47   0   null 7 国語  100   50   0   null Dlookup関数で以下のように式を書きましたが、うまく結果が求められておりません。 =IIf([演算] Is Not Null,DLookUp("[ID]","テストM","[点数] >= " & ([平均点] And "[演算)]" Is Not Null))-[ID],Null) 上記の式で演算を行うとID3のレコード演算結果が「-2」(※1-3の結果) ID5のレコード演算結果が「-4」(※1-5の結果)になります。 VBAを使ってでも解決したいと思っております。 大変恐縮ですが、どなたかアドバイスでもご教授頂けますでしょうか? よろしくお願い致します。