• ベストアンサー

算術演算子について

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

質問者が選んだベストアンサー

  • ベストアンサー
  • photon90
  • ベストアンサー率46% (7/15)
回答No.3

4÷4=1…0 となりますから、出力は0となるかと。 %という演算子は2番さんもおっしゃっているように、「余り」だけを求める演算子で「割り算」の結果を示しているわけではありません。 Javaはわかりませんが、通常割り算は/を用いて 4 / 2 = 2 と表記されます(ご存じだとは思いますが)。 10%3 → 1 は 10÷3=3…1 ですから1と出力されますよね。 余りだけを注目して見てください。

その他の回答 (2)

  • k_kota
  • ベストアンサー率19% (434/2186)
回答No.2

%は割るじゃなくて、あまりを求める演算子です。 あまりを求めるというのが分からないなら、小学校の2年生か3年生の算数の教科書に載ってるはずです。

yu28ka14
質問者

お礼

早速の回答有難う御座います。%が余りを求める演算子であることは、質問文の中にも記しましたように理解しております。

  • photon90
  • ベストアンサー率46% (7/15)
回答No.1

1÷4=0…1 2÷4=0…2 という計算をしているからです。 これで説明になっているでしょうか。

yu28ka14
質問者

お礼

再度の回答ありがとうございました。

yu28ka14
質問者

補足

早速の回答を有難う御座います。もう少し説明をお願いします。%が余りを求める演算子であることはわかります。簡単な例で、10%3=1ですよね。「1÷4=0…1、2÷4=0…2、という計算をしているからです。」との事ですが、1÷4=0がどうして1と表示されるのですか?2÷4=0…2となるとすると、3÷4=0…3、 4÷4はどうなりますか?お手数をおかけします。もう一度回答頂ければ幸いです。

関連するQ&A

  • 算術演算子にて、整数での除算処理は商になる?

    JAVAのプログラミングを勉強しているのですが、JAVAの算術演算子にて、 参考書に「除算演算子は割り算を行うものだが、整数同士の割り算を用いると「商」を計算する」と書かれているのですが、これはどういう意味でしょうか? 整数同士の割り算をすると、小数点ではなく四捨五入をした整数値が出力されるのでしょうか?

    • ベストアンサー
    • Java
  • Javascriptで算術演算子を作っているのですがわかりません・・・

    あの、JavaScriptの課題で、算術演算子つくり、加算、減算、乗算、除算、整数の除算の商と余りが求めれるように、a bにそれぞれ数値を代入して計算開始というのを作りました。それで、数値以外のたとえば、アルファベットなどを代入した場合、それは数値ではありません、数値を代入してくださいというような数値の入力を促すようになるようにしたいのですが、エラーばかりでます。どのようにソースを打ったら良いのかさっぱりわかりません。教えてください!!よろしくおねがいします。

  • 算術演算子と連結演算子の優先順位について

    select 'aa' ||nvl2(comm,1,0) + nvl2(comm,1,0) || 'aaaa' from emp →ORA-01722: 数値が無効です。 というエラーが発生します。 nvl2(comm,1,0) + nvl2(comm,1,0)部分に括弧でおおうと、 つまり(nvl2(comm,1,0) + nvl2(comm,1,0))にするときちんと実行結果が出ます。 算術演算子のほうが連結演算子より優先順位が高いと習ったのですが実は逆ということでしょうか。 回答のほどよろしくお願い致します。

  • プログラムの算術演算で教えて下さい。

    お世話になっております。 とある試験問題のアセンブラ言語について、算術演算が理解できず困っておりますので投稿させて頂きました。 この問題を解決できないと、先に進めない状態となっており、困っております。 【前提】 実機を使用してアセンブルしながら値の確認を行っているのですが、下記の問題において、アドレス8008でGR2の値が下記の様に表示されています。 【GR2】 アドレス:#8012 算術:-32750 論理:32786 1000 0000 0001 0010 また、問題集の解説には下記の様に記載されています(一部抜粋)。 「1回目のGR2は#8012、GR3は#8016です。CPA命令は算術10進数で比較しますから、変換するとGR2が-32750、GR3が-32746です。GR2やGR3に設定したのはラベルのアドレスでしたね。」 【ご質問】 GR2の値が、なぜ「-32750」になるのか?を教えて下さい。 また、これは"8012を指しているのでしょうか?それとも内容の「20」を指しているのでしょうか? 今、私が理解できるのは、 ・実機検証画面の2進数「1000 0000 0001 0010」は、16進数の「8012」を示している ・アドレス8008行によって#8011番地にONEが加算、つまり#8011+1=#8012番地を対象とする ところまでは理解できるのですが、その先どう計算したら良いのかがわかりません。 現在数百ページある書籍の内70ページ程を読み進めたところですが、全体的に算術演算がよく理解できていない様に感じてはいます。 が、書籍を読んでもいまいち理解が難しいため、お伺いします。 【書籍内問題】 (1)下記プログラムを実行した結果、ANS番地に格納される値を10進数で答えなさい。 (2)下記プログラムは誤りがあります。誤っている箇所を修正しなさい。 ■アセンブルリスト  ※-------------------------------- ご覧のブラウザ環境によってスペース等の表示が変わる可能性がありますので、 区切りで「/」を入れております。 見やすくしただけで、問題自体に「/」はございません。 ※-------------------------------- ADDR: メモリ内容  /プログラム  : /REI7004 / START 8000: 1210/0000 /LAD /GR1,0 8002: 1220/8011 /LAD /GR2,DATA 8004: 1230/8016 /LAD /GR3,ENDDATA 8006: 2012/0000 /LOOP /ADDA /GR1,0,GR2 8008: 2020/8010 /ADDA /GR2,ONE 800A: 4423/ /CPA /GR2,GR3 800B: 6100/8006 /JMI /LOOP 800D: 1110/8016 /ST /GR1,ANS 800F: 8100/ /RET 8010: 0001/ ONE /DC /1 8011: 000A/ DATA /DC /10 8012: 0014/ DC /20 8013: 001E/ DC /30 8014: 0028/ DC /40 8015: 0032/ DC /50 8016: ENDDATA /DS /0 8016: 7FFF/ ANS /DS /1 : END 以上となります。 ド素人の質問で申し訳ありませんが、ご回答頂ける方がいましたらよろしくお願いします。

  • NOT演算

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

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

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

  • 三項演算子についてお聞きします。

    当方、Javaに取り組み始めた初心者です。 C言語で int i = 20; i <= 10 && i >= 0 ? printf("ok") : printf("ng"); //実行結果:ng と記述するとエラーにならずにちゃんと実行されるのですが、JAVAで同じように記述するとエラーになります。なぜでしょうか??お詳しい方、ご教授いただけると幸いです。 [Java] int i = 20; i <= 10 && i >= 0 ? System.out.println("ok") : System.out.println("ng"); //実行結果:エラー

    • ベストアンサー
    • Java
  • プログラミングC言語の問題ですがわかりません。

    プログラミングC言語の問題ですがわかりません。 5つのint型変数a,b,c,ans,responseを宣言する。a,b,cの値はscanf関数で読みこむことにより初期化する。 a(1)b(2)c= と表示して、scanf関数によりユーザーの答案をresponseに読み込み、演算結果が正しければ1、間違っていたら0を表示するプログラムを作成しなさい。ここで(1)と(2)には算術演算子(+,-,*,/,%)がはいる。5×5=25通りの演算をすべて実行するようにしなさい。 特に正しければ1、間違っていたら0を表示するプログラムがわかりません。 まだprintfとscanf関数と演算子しかやっていないのでそれを踏まえたプログラムを1通りだけでいいので書いて頂けると幸いです。

  • SQLの中での算術演算子使用は?

    VB.NETで、dataadapterウイザードでSQL文が 自動作成されますが、この中で¥やMODなどの算術演算子を 記述するとエラーになります。 下記のようなことがしたいのですが、いい方法はないでしょうか? 例  開始時間 a 時 b 分    終了時間 c 時 d 分    a,b,c,d はそれぞれフォームから手入力(string)    所要時間を e 時間 f 分と表示させたい 今SQLで、   ((val(c) - val(a))*60 + (val(d) - val(b))) as 所要分 としており、ここまではエラーなしで動いてくれます。 ただこれに   (上の計算式)¥60として所要時間を   (上の計算式)MOD 60として端数の分を 計算させに行くとエラーになります。 こんな使い方はできない(しない)ものなのでしょうか。 datasetにこれ以外に数値(データ)を持たせる方法があれば ご教示ください。 よろしくお願いします。

  • プログラム(演算)

    プログラミング初心者です。 「1+3*(2+4)」などのように1桁の正整数と加算、乗算、カッコからなる式がキーボードから入力されるとき、その計算結果を画面に表示するプログラムを作成せよ。ただし、再帰を使用しないこと。 というのが問題なのですが、手の付け方がまったく思いつきません。分かる方がいればヒントをくだされば幸いです。

専門家に質問してみよう