みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

後置インクリメントの計算過程について

後置インクリメントの計算過程について
Javaに関して初めての質問となります。よろしくお願いいたします。数日前に学習し始めたばかりの超・初心者です。
現在、基本的な演算について、インクリメント・デクリメントのそれぞれ前置と後置の違いを学習したところなのですが、どうも後置の理解が完璧でないようで、仮に変数をxとした場合、式内にxが二度出てくる場合の後置の計算が理解できません。

具体的には
int x, y;
x = 10;
y = x++ + x++;

上記でコンパイルした結果、y=21となる過程を教えていただけませんでしょうか。
私の理解では、x++は計算に使用した後にxに1を加算するので、まず
y = 10 + 10
で、y = 20 となり、その後にxに1を加算してx=11が私の理解です。

よろしくお願いいたします。

投稿日時 - 2009-12-23 01:10:42

QNo.5541322

すぐに回答ほしいです

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

x = 10;
y = x++ + x++;
をきちんと処理すると
y = x++ + x++; →
y = 10 (この時点で x は 11) + x++; →
y = 10 + 11 (この時点で x は 12); →
y = 10 + 11 = 21
となります. この文のあと x は 12 です.
逆に
y = ++x + ++x;
だと
y = 11 (この時点で x は 11) + ++x; →
y = 11 + 12 (この時点で x は 12); →
y = 11 + 12 = 23
です. この場合でも x は 12 です.
と, しっかりおいかけるとその 4つのうち 2つ目は 3つ目と等しいけど 1つ目, 2つ目 (これは 3つ目と同じ), 4つ目は全て異なることもわかるはず.

投稿日時 - 2009-12-23 01:56:10

補足

なるほど!

y = x++ + ++x + ++x
の場合は、
y=10 + ++x + ++x (この時点でx=11)
y=10 + 12 + ++x (この時点でx=12)
y=10+12+13 (この時点でx=13)
y=35

y = x++ + ++x + x++
の場合は、
y=10 + ++x + x++ (この時点でx=11)
y=10 + 12 + x++ (この時点でx=12)
y=10+12+12 (この時点でx=13)
y=34

y = x++ + x++ + ++x
の場合は、
y=10 + x++ + ++x (この時点でx=11)
y=10 + 11 + ++x (この時点でx=12)
y=10+11+13 (この時点でx=13)
y=34

y = x++ + x++ + x++
の場合は、
y=10 + ++x + ++x (この時点でx=11)
y=10 + 11 + ++x (この時点でx=12)
y=10+11+12 (この時点でx=13)
y=33

いずれの場合もx=13

あってますでしょうか?

投稿日時 - 2009-12-23 02:46:54

ANo.3

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

import java.lang.*;

public class Op {
public static void main(String argv[]) {
int x = 10 ;
int y = 0 ;
int i = 0 ;
for ( i = 0 ; i < 5 ; i++ ) {
System.out.println("x="+x+" y="+y);
y=x++ + x++ ;
}
}
}

x=10 y=0
x=12 y=21
x=14 y=25
x=16 y=29
x=18 y=33

投稿日時 - 2009-12-23 01:21:00

ANo.1

y = 10 + 11になります。

計算に使用したあと、ではなく計算途中でもインクリメントはされてます。

自分の場合、ソース上でxの値を認識したらインクリメントされてる、というふうに考えてます。

最初のxを「10」と認識した後にインクリメントされて、2番目のxは「11」となっているんだな、だから展開すると、y=10+11で答えは21になるんだなって感じです。

説明になってるかなぁ。

投稿日時 - 2009-12-23 01:20:23

補足

早速のご回答ありがとうございます。
多分わかったと思います。。。

ちなみに
int x, y;
y = x++ + x++ + x++;
の場合は、y=10+11+12 で y=33

y = ++x + ++x + ++x;
の場合は、y=11+12+13 で y=36

あってますでしょうか?
もしこれが正しいとすると、2項目以降の変数xは前置でも後置でも同じ結果にならないでしょうか?
具体的には
y = x++ + ++x + ++x
y = x++ + ++x + x++
y = x++ + x++ + ++x
y = x++ + ++x + ++x
は全て同じ結果になりませんか?

投稿日時 - 2009-12-23 01:43:03

あなたにオススメの質問