- ベストアンサー
演算子について
こんにちは。JAVA超初心者です。 Javaの本に ++x はxを使ったあとに1増やす と書いてありましたが、イマイチ意味がわかりません。 「使う」とは?? int n = 0; int m = 0; m=n++; System.out.println(m); System.out.println(n); これの実行結果は 0 1 になるらしく、 m==n==; の意味は nの値(0)にmを代入した後nに1プラスする。 m=n++は m=n;,n=n=1;と書き換えられる。 とのことですが、どうもしっくり来ません。 nをmに代入するのなら、int m=0 が書いてある 意味がないような気がするし、 この実行結果に納得がいきません。私は 1 0 になると思うのですが・・・。 これ以上どう分かりやすく説明すればいいのか わからないと思われるかもしれませんが、 もし思いついたら教えてください。 宜しくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
結構、ややこしい部分を含んでいますので、皆さんの回答と重複するかも知れませんがお許しを。 まず、n++; と ++n; は どちらも n=n+1; の意味です。 ところが、m=n++; と m=++n; は全く違う意味を持ちます。 違いはnのカウントアップと、代入の順序が入れ変わると言う事です。 2文に書き換えできるかどうかと言う議論がありましたが、次のように書き換え可能です。 m=n++; m=++n; -------------- m=n; n=n+1; n=n+1; m=n; n=0,m=0でスタートした場合、実行後は、 左がm=0,n=1 になり、 右はm=1,n=1 になります。 次に、for文の議論がありました。No.1のお答えの通りですが少し補足します。 for(i=0;i<10;i++;){ 処理 ・ 処理 } は次のように書き換えたのと同じです。 for(i=0;i<10;;){ 処理 ・ 処理 i++ } 逆に for(i=0;i<10;++i;){ 処理 ・ 処理 } ならば、 for(i=0;i<10;;){ ++i; 処理 ・ 処理 } となります。つまり「実行」とは「代入」という1つの命令であったり、{}で囲まれた複数の命令文で有ったりするのです。カウントアップがその命令群の前か後かと言う違いを++nとn++で区別しているのです。
その他の回答 (6)
- hameggs
- ベストアンサー率38% (8/21)
>nをmに代入するのなら、int m=0 が書いてある >意味がないような気がするし、 たしかに、パッと見は意味はないように思えますが、 変数の初期化をうながしているのではないでしょうか? 私もたいした勉強をしているわけではないのでなんともいえませんが、初期化をしておかないと、コンパイル時に「○○は初期化されていない可能性があります」というエラーが出るときがあります。 なんにせよ、初期化する癖はつけておいた方が今後のためにも良いかと思います。
- wolv
- ベストアンサー率37% (376/1001)
>nをmに代入するのなら、int m=0 が書いてある >意味がないような気がするし、 これは大正解です。この場合、mにあらかじめ0を代入するのは意味がありません。
- wolv
- ベストアンサー率37% (376/1001)
#include <stdio.h> main(){ int i; for(i=0;i<5;i++){ printf("%d\n",i); } for(i=0;i<5;++i){ printf("%d\n",i); } } というプログラムをlsicというCコンパイラーでコンパイルし、実行したところ、 0 1 2 3 4 0 1 2 3 4 という結果になりました。つまり、どちらもループの中身を実行した後にiの加算の演算が行なわれています。
- wolv
- ベストアンサー率37% (376/1001)
> m==n==; の意味は > nの値(0)にmを代入した後nに1プラスする。 > m=n++は m=n;,n=n=1;と書き換えられる。 このあたり、タイプミスがあるような気がします。 コンピューター言語の場合、1文字の違いが大きな違いになることが多いので、修正結果を補足してください。 確認の画面でよく確認するようにしましょう。
- -soh-
- ベストアンサー率27% (55/201)
こんちゃ sohです >++x はxを使ったあとに1増やす > ちゃいますな。 x++ だったらxを使った後1増やすですけど ++xは xを使う前に1増やすです 貴方の書いたプログラムでも++は ちゃんと後ろについてますよ。 ++ ってのは x = x+1; の意です。 この x=x+1;を先に処理するか後に処理するかに 焦点を当てた説明文なんだと思いますよ、それ。 >「使う」とは?? > その行の処理で ++ の付いた変数の使用 の意ですかね 例えば m=n++; が m 0 n 1 になる理由ってのは m=n;を処理した後 n++; が処理されるから m 0 n 1 になるって事を言ってるんです。 >m=n++は m=n;,n=n=1;と書き換えられる。 > そんな風には書き換えられません(^^; 書き換えられるとしたら int n=0; int m=n n=n+1; でしょうね。 n++ ってのは書き換えると n=n+1 の意味です。 >この実行結果に納得がいきません。私は >1 >0 >になると思うのですが・・・。 > え~っと、なにゆえ nが0になるんでしょうか? 1 1 になるんだったら話しはわかるんですけど 1 0 になる理由はどこにも無いですよん。 あぁ、そうか ++って書いた処理を m=n+1; だと思ってませんか? そうじゃなくて m=n; n=n+1; です むぅ、まだ分かりにくい説明だなぁ、、、ごめんなり。
- hameggs
- ベストアンサー率38% (8/21)
for文なんかが、良い例ではないでしょうか? テキスト等でfor文を確認してみてください。 例えば・・・・ for(int i=0; i<10; i++){ System.out.println(i); } みたいなのがあったとします。 ここで何をやっているかというと・・・ 「 i を出力してから i の値を1増やす」 ということをやっていますね^^。まさしくiを使ってからiを増やしているのです。 なんとなくイメージはつかめたでしょうか? n==m==;というものは私もはじめて見ましたので他の方におまかせいたします。
補足
n==m==; は m=n++のタイプミスでした。。。