• ベストアンサー

インクリメント演算子について

i = 1の場合 i++は変数iの値を返してから、1加算する ++iは変数iに1を加算し、その値を返す この「返す」とはどういう意味ですか?

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

  • ベストアンサー
回答No.2

i = 1 a = i++; // aにiの値を代入、その後iの値を増分する。 ↑ a = i; i = i + 1; a = ++i; // iの値を増分、その後aにiの値を代入する。 ↑ i = i + 1; a = i; これで理解できますか?

noname#68601
質問者

お礼

教科書にもない増分という言葉がでてきました。 まだまだ私にはJavaは理解し難いものですが、 何とか一回目の月間テストは提出できました。 理解できるように頑張ります。

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

その他の回答 (2)

  • osumitan
  • ベストアンサー率33% (102/307)
回答No.3

Javaでは、式は値を持つ、という考え方があるので、 (voidメソッドを呼んだときの戻り値など、"値がない"のも値の一種だとして) その式の値を受け取ったとき(No.2の方の例でいう変数a)、 受け取った側から見て、右辺の式が「値を返した」ということだと思います。 i++も、++iも、iに1を加算するという処理をする点では同じだけど、 その式の値は、一方は加算前の値、他方は加算後の値、という違いがあるわけですね。

noname#68601
質問者

お礼

難しいですが理解できるように頑張ります。

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

i = 1 a = i++ a = ++i で aが1になるか2になるかということです

noname#68601
質問者

補足

a=i++は返してから1加算すると1になり、 a=++iは加算してから返すと2になる。 何故そうなるのか返すの意味が解りません。

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

関連するQ&A

  • 文字列の演算

    文字列の値を1バイトずつ加算して、加算した値の最後の1バイトだけ、取得するというロジックを教えてください。 たとえば、 0x49 0xfc 0x31 0x9e 0x9e と変数aにはいっていた場合、 これを1バイトずつ加算する方法は・・・?

  • 後置インクリメントについて質問

    以下の式はxに10が代入されているとします。 そして、yに21が代入されるまでのプロセスです、それを見た上で私の質問に答えてください。 y=x++  + x++ ; 1. y を評価する (今の場合, 代入の左辺なので変数 y の位置を求める). 2. x++ + x++ の左の x++ を評価する. 値として「x の現在の値」である 10 が得られ, 後置インクリメントの副作用としてこの時点で x の値は 11 になる. 3. x++ + x++ の右の x++ を評価する. 値として「x の現在の値」である 11 が得られ, 後置インクリメントの副作用としてこの時点で x の値は 12 になる. 4. 2 と 3 で得られた値を使って加算を行う: 10 + 11 = 21 が得られる. 5. 1 で得られた「変数 y の位置」に 4 で求めた値 21 を代入する. 質問:上記のプロセスのように、後置インクリメントは、「変数を評価した直後」に値が増えるんですよね?

    • ベストアンサー
    • Java
  • インクリメント/デクリメント演算子を使った計算

    Javaでのインクリメント演算子とデクリメント演算子を 使った計算についての質問です。 int a = 10; int b = a++ + ++a + --a - a--; このコード処理後の変数a,bの値の計算方法(考え方)が つかめず苦戦しています。 解答はa=10,b=22だそうです。 ちなみに例えば次のコードのb=a++;のように 右辺と左辺が1つずつの場合は理解しやすいです。 int a = 1; int b = 0; b = a++; //処理A 処理A後の変数a,bの値は b=aをした後でa=a+1を行うので a=2,b=1 となることは理解できます。 ご教授のほどよろしくお願いします。

  • インクリメント演算子

    はじめまして。プログラミングについて、とても初歩的な所で つまづいています。 変数を一つだけかつ、インクリメント演算子のみを用いて 整数値を一つ入力し,その整数値を1ずつ増やした結果を出す 4,5,6,7,8  (←このようにしたい) というプログラミングを書きたいのですが、どこのサイトを見ても 5個の文字の例はありませんでした。 2個までは以下の例でできました。 #include <stdio.h> main() { int a; printf("整数値を入力"); scanf("%d",&a); printf("1ずつ増加%d,%d,\n",a++,a); } もう、この問題で何日も立ち止まっています。 お願いです、どなたか助けてください。

  • インクリメント演算子について

    インクリメント演算子について プログラミング超初心者です。 大学のプログラミングの課題で インクリメント演算子を使って 数字をひとつずつ大きく(小さく)していくという課題が出ました 私が作ったプログラムは以下のとおりです #include <stdio.h> int main(void) { int x ; //変数宣言 printf("整数値を入力してください:"); scanf("%d",&x); printf("1ずつ増加\n"); printf("%d,",x++); printf("%d,",x++); printf("%d,",x++); printf("%d,",x++); printf("%d\n",x); printf("1ずつ減少\n"); printf("%d,",x--); printf("%d,",x--); printf("%d,",x--); printf("%d,",x--); printf("%d\n",x--); } ちなみに、整数値は10にしました。 結果は 1ずつ増加 10,11,12,13,14 1ずつ減少 14,13,12,11,10 と、望んでるものになったのですが、疑問があるので質問させていただきます。 xを変数にすると、x++はx+1になると思うのですが表示されたのは10、11、…と 10から表示されました。 しかも、増加していった最後のxはなぜ14になるのでしょうか? 課題は出来たのですが、頭が混乱しています… 詳しく解説をお願いします。

  • 後置インクリメントについて質問

    java解説書に以下のような説明がありました。この説明は、後置インクリメントについての説明です。 「xは10が代入されているとする。 y=x++ + x++ ; //最初の状態。xは10です y=10+ x++ ;//10をそのまま加算し、xを1加算します。xは11です。 y=10+ 11 ;//11をそのまま加算し、xを1加算します。xは12です。yは21になります。」 質問:上から2番目のコメント文の中で、「10をそのまま加算し」とありますが、これは何に加算するんですか?何も入ってないyに加算するということでしょうか?それとも それともxにxを加算するという意味でしょうか?参考書の書き手の意図がわかりません、、。 質問2:yが21、xが12になるプロセスは、 yにx(10)が加算される      ↓ yにx(10)を代入した(計算した)「直後」であるから、後置インクリメントによりxが1増えて、xが11になる      ↓ x(11)をyに代入 ↓ yは21になる ↓ yに11を代入した(計算した)「直後」であるから、後置インクリメントによりxが1増えて、xが12になる こういうことでしょうか? 質問3:質問2の計算プロセスのように、左辺の変数が、右辺の変数が+で繋がれていた場合、左の項から順に足されていくということでしょうか?

    • ベストアンサー
    • Java
  • インクリメント演算子の前後

    インクリメント演算子(++や--)について伺いたいのですが、 以下のような場合、変数の前と後ろで何か処理上違いはあるのでしょうか? //文字列の最後までポインタを進める while ( *p1 ) { ++p1; } printf("%d" , *p++); のように(文法が間違っていたらすいません)、 出力した後でインクリメントするといった使い方の違いは分かるのですが、インクリメント単独処理での前後の違いがあれば教えていただきたいです。

  • perlのインクリメントの意味

    インクリメントって言うのは値を1つくわえるという意味ですよね?  本を読んでいてなんだか今までやってきたインクリメントの説明と結びつかない内容が出てきました。  「つまり「MAIE 5.01」などの文字列で、「MSIE 5」までの部分にマッチしたりするわけです。 その場合には、$ua_freq{"MAIE $1"}の$1が変数展開されて、「MSIE 5」や「MSIE 4」などになりますので、コレをハッシュ%ua_freqのキーとする要素の値をインクリメントします。 」  ここにインクリメントと出ていますが、1をくわえると言う意味になるのでしょうか?なんだか、1を加えるというのが結びつかない感じがします。  この場合のインクリメントとはどういう意味で書いているのでしょうか?  よろしくお願いします。ちょっと素人ですので、わかりやすいように説明をしていただけると嬉しいです。  

    • ベストアンサー
    • Perl
  • シェルスクリプトの演算について

    下記のような内容で、list変数の値から抽出してtest{i}変数に入れるようにしています。 ※awkコマンドでのprintの値を for の値にしています。 for i in 0 1 2 do test${i}=`echo ${list} | awk '{ print $'${i}' }'` done この例はうまくいくのですが、 print $'${i}'の部分で${i}の値にプラス2したものを利用したく、 test${i}=`echo ${list} | awk '{ print $'${i+2}' }'` や test${i}=`echo ${list} | awk '{ print $i=`expr ${i} + 2` }'` 等を試しましたがうまくいきません。 どのようにすればよいでしょうか。 よろしくお願い致します。

  • インクリメント演算子をprintf文で使うことについて

    ◎1-------------------------------------- #include<stdio.h> int main(void) { int i=0; while(i<=20){ printf("%d\t%d\t%d\t%d\t%d\n",++i,++i,++i,++i,++i); } return 0; } ------------------------------------------ ◎2-------------------------------------- #include<stdio.h> int main(void) { int i=0; while(i<=20){ printf("%d\t%d\t%d\t%d\t%d\n",i++,i++,i++,i++,i++); } return 0; } ------------------------------------------ 以上2つのプログラムについて疑問があるのですが、まず◎1についてですが、実行結果は、 5    4   3   2   1 10   9   8   7   6 15   14   13   12   11 20   19   18   17   16 25   24   23   22   21 以上のようになるのですが、自分の考えでは、「printf("%d\t%d\t%d\t%d\t%d\n",i++,i++,i++,i++,i++);」部分の、一番最初の「++i」から処理が始まり、 1  2  3  4  5      ・      ・      ・ のようになる事を期待したのですが、一番最後の「++i」から処理が始まってしまいました。 次に、◎2についてですが実行結果は、 0   0   0   0   0 5   5   5   5   5 10  10  10  10  10 15  15  15  15  15 20  20  20  20  20 以上のようになりました。「printf("%d\t%d\t%d\t%d\t%d\n",i++,i++,i++,i++,i++);」部分で、iをいったん表示してから、iに1を加算するということで、次のiは1になっており、 4  3  2  1  0      ・      ・      ・ のようにまた一番最後の「i++」から処理され以上のようになると思ったのですが、そうはなりませんでした。 以上、◎1と◎2について何故こうなるのかご回答いただければ嬉しいです。