- ベストアンサー
インクリメント演算子について
i = 1の場合 i++は変数iの値を返してから、1加算する ++iは変数iに1を加算し、その値を返す この「返す」とはどういう意味ですか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- 後置インクリメントについて質問
以下の式は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 となることは理解できます。 ご教授のほどよろしくお願いします。
- 締切済み
- Java
- インクリメント演算子
はじめまして。プログラミングについて、とても初歩的な所で つまづいています。 変数を一つだけかつ、インクリメント演算子のみを用いて 整数値を一つ入力し,その整数値を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); } もう、この問題で何日も立ち止まっています。 お願いです、どなたか助けてください。
- ベストアンサー
- C・C++・C#
- インクリメント演算子について
インクリメント演算子について プログラミング超初心者です。 大学のプログラミングの課題で インクリメント演算子を使って 数字をひとつずつ大きく(小さく)していくという課題が出ました 私が作ったプログラムは以下のとおりです #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になるのでしょうか? 課題は出来たのですが、頭が混乱しています… 詳しく解説をお願いします。
- ベストアンサー
- C・C++・C#
- 後置インクリメントについて質問
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++); のように(文法が間違っていたらすいません)、 出力した後でインクリメントするといった使い方の違いは分かるのですが、インクリメント単独処理での前後の違いがあれば教えていただきたいです。
- 締切済み
- C・C++・C#
- 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` }'` 等を試しましたがうまくいきません。 どのようにすればよいでしょうか。 よろしくお願い致します。
- ベストアンサー
- その他(ITシステム運用・管理)
- インクリメント演算子を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について何故こうなるのかご回答いただければ嬉しいです。
- ベストアンサー
- C・C++・C#
お礼
教科書にもない増分という言葉がでてきました。 まだまだ私にはJavaは理解し難いものですが、 何とか一回目の月間テストは提出できました。 理解できるように頑張ります。