// num1~4は、いずれも1 int num1 = 1; int num2 = 1; int num3 = 1; int num4 = 1; out.print(++num1); // +1されてから、print out.print(num2++); // printしてから+1 out.print(--num3); // -1してから、print out.print(num4--); // printしてから-1 %>
の結果、2101になりました。
最初の計算は、num1の1+1で2になるのは理解できます。
が、2番目はnum2の1+1で2になると思うのです。
3番目は、-1+1で0
4番目はnum4の1-(-1)で2になると思います。
++は値を1増やし、--は値を1減らすのはわかっています。
どういう計算になるのか教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答9件
0
プログラム中のコメントに書いてある通りですね。
2番目はnum2の1+1で2になると思うのです。
の間違いは想像できますが、
3番目は、-1+1で0
4番目はnum4の1-(-1)で2になると思います。
は、どこから -1 を発想したのか不思議です。
#追記
おしえてください。どういう計算式になるのですか?
こういう計算式です。コメントをコードにしただけですが。
Java
1// num1~4は、いずれも1 2int num1 = 1; 3int num2 = 1; 4int num3 = 1; 5int num4 = 1; 6 7// out.print(++num1); // +1されてから、print 8num1 = num1 + 1; 9out.print(num1); // この命令により 2 が表示される 10 11// out.print(num2++); // printしてから+1 12out.print(num2); // この命令により 1 が表示される 13num2 = num2 + 1; 14 15// out.print(--num3); // -1してから、print 16num3 = num3 - 1; 17out.print(num3); // この命令により 0 が表示される 18 19// out.print(num4--); // printしてから-1 20out.print(num4); // この命令により 1 が表示される 21num4 = num4 -1;
おそらく、「演算結果」と「(画面)出力」の区別が付いていないんだと思います。
投稿2019/01/18 01:48
編集2019/01/18 02:53総合スコア84529
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/18 01:52
2019/01/18 02:26
2019/01/18 02:37
2019/01/18 02:54
2019/01/18 04:04
2019/01/19 08:49
0
まず言語仕様を学びましょう。できれば言語仕様そのものを読む、難しいなら教科書で学びましょう。
15.15. Unary Operators
15.14. Postfix Expressions
公式邦訳は見つけられませんでしたが、訳されている方がいらっしゃったので感謝して、、
重要なのは、++も--も、「式」だと言うことです。
式には結果があります。どういう結果になるかが上記の仕様に書かれています。
(邦訳:15.15.1 前置増分演算子 ++ より引用)
その前置増分式の値は,その新しい値が記憶された後の変数の値とする。
(邦訳:15.14.1 後置増分演算子 ++ より引用)
その後置増分式の値は,その新しい値が記憶される前の変数の値とする。
式ですから評価後は結果があります。
そして記述の通り、前置(++n, --n)か後置(n++, n--)かでその結果の仕様が違います。
前置(++n, --n)の場合の結果は「新しい値が記憶された後の変数の値」、つまり+1あるいは-1した後の値が式の結果になるので理解しやすいのですが、後置(n++, n--)の場合の結果は「新しい値が記憶される前の変数の値」、つまり+1あるいは-1する前の値が式の結果になります。
この違いが理解できない、あるいは考えるのめんどくさい、ということなら、++/--使うのやめちゃうのも手だと思います。
投稿2019/01/18 07:17
総合スコア1563
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
正確に言うならこれは四則演算ではなくインクリメントです。前置と後置で返り値に違いがあります。
++a
: a
をインクリメントして、インクリメントした値を返す。
a++
: a
をインクリメントして、インクリメントする前の値を返す。
したがって、 print(num2++)
については次のように解釈されるはずです。( System.out.
などは省略)
print(num2++); ↓ print(1); // num2 == 2
これは「 print
してから a
をインクリメントする」のではなく、 a++
を評価したときに返す値が「もともと a
だった値」なのです。
投稿2019/01/18 02:19
総合スコア6753
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
out.print(++num1); // +1されてから、print
out.print(num2++); // printしてから+1
out.print(--num3); // -1してから、print
out.print(num4--); // printしてから-1
分かりやすく?書くなら以下でしょうかねぇ。
Java
1num1 += 1; 2out.print(num1); //出力結果2 3 4out.print(num2); //出力結果1 5num2 += 1; 6 7num3 -= 1; 8out.print(num3); //出力結果0 9 10out.print(num4); //出力結果1 11num4 -= 1;
++num と num++ で結果が同じになってしまうなら 2つで記述を分ける必要がなくなってしまいますよね。
投稿2019/01/18 01:54
編集2019/01/18 02:07総合スコア2341
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/18 02:03
2019/01/18 02:06
2019/01/18 02:38
0
コメントに「printしてから+1」とあるとおりで、print
にnum2
(1)を渡したあとで1を足しています。
投稿2019/01/18 01:45
総合スコア145183
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/18 01:49
2019/01/18 01:51 編集
0
興味深いスレッドになっていますね.
学生さんが教科書か先生が書かれた ++,-- のコードを理解しようと四苦八苦しているようです.
ご自身で考えたのか, 一つの方法として ++/-- を +1/-1 と文字レベルで置き換えて, ++num を (+1)num, --num を (-1)num 等とし, 間に(数学で'×'を省略するような感じで)'+'が省略されているとして計算すれば良いのではないかとしましたが, 結果と合わなかった...というところでしょうか.
実際, ++/-- は理解するモノでは無く「こういう結果になるモノ」と覚えるしかない類です.
1増やす/1減らす というのは間違っていませんが, 全てを表してはいません. それは数学には基本無いはずの「計算されるタイミング」です. (乗除を加減より先に...というのともちょっと違います.)
プログラムは順番に実行されます. 一行に書かれたプログラムでも, コンピュータの内部では特定の順番に従って実行され, 計算も同様です.
out.print() は括弧の中の値を表示するモノなので, 当然括弧の中が先に計算されます. が, ++/-- はその「計算(=変数の値が変更)されるタイミング」に干渉します.
変数の前に ++/-- を書いた場合は先に計算される(普通の)タイミングですが, 後ろに書いた場合は out.print() が先に実行され, その後に計算(変数の値が変更)されるのです. ++/-- の付いている部分が括弧の後ろまで飛び出して, out.print(num++); が out.print(num); num++; となってしまうような感じでしょうか.
「飛び出したら out.print(); num++; じゃないの?」と思われるでしょうけれど, ++/-- は変数部分は残すのです.
こういった, 傍目にはなんのためにあるのかサッパリ分からないようなモノなので, 実際使わなくてもプログラムは作れます. 端的には, "num=num+1" と書くよりも "num++" と書いたほうが4文字短いからとか格好良いからとかいうレベルの話です.
(超内部的に言えば, CPUには昔から1を足す/1を引くという専用命令があったため, 汎用足し算命令よりも専用命令になり易いように ++/-- が...というコトもありましたが, 後置の専用命令は無かったような^^; )
ほぼ, 他の方々が説明してくださっていることを言葉を変えてみただけですが, ご理解の助けになれば幸いです.
投稿2019/01/20 17:17
編集2019/01/20 17:22総合スコア12646
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/26 16:58
2019/01/26 17:16
0
- インクリメント・デクリメントの前置と後置の使い方
https://eng-entrance.com/java-cal-position
...
オペランドの前にあれば、式の中でオペランドの値は増やされたり減らされたりした後の値が用いられる。
一方、オペランドの右にあれば、式の中でオペランドの値は増やされたり減らされたりする前の値が用いられる。
...
print(a) は a という式の値を表示します。(四則演算をしていない変数だけでも 式とみなします)
++a や a-- も式です。
++a は a に +1 をして その結果が式の値になります。
a++ も a に +1 をしますが、式の値は +1 する前の値になります。
投稿2019/01/19 03:47
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
++は値を1増やし、--は値を1減らすのはわかっています。
と言っておきながら
4番目はnum4の1-(-1)で2になると思います。
というのは矛盾してると思いませんか?
投稿2019/01/18 04:16
総合スコア20651
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/18 04:21
2019/01/18 04:49
2019/01/18 04:49
2019/01/20 18:04
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。