アプリ版:「スタンプのみでお礼する」機能のリリースについて

C++の言語で{}の中身が
int x=2;
int y=0;
@(ここに下の文のどちらかを入れます。)
cout<<y<<endl;
return 0;
なのですが、@の部分にy=++x*10とした時には20が、y=x++*10とした時には30が現れたのですが、上のはyにxに1を足したものを入れた後に10倍するのですよね。
下のは何故20になるのですか?

A 回答 (5件)

前置インクリメントは代入前にインクリメントされ


後値インクリメントは代入後にインクリメントされるからです
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
代入後にインクリメントするということはまずyにxを代入するのですよね。
そのあとがわからないのですが、10をかけてから1足したら21になりそうですけどそうならないのはどうしてですか?

お礼日時:2018/05/10 05:30

> y=++x*10とした時には20が、y=x++*10とした時には30が現れたのですが



逆じゃない?

y=++x*10; // 30
y=x++*10; // 20

前置きと後置き
http://www.cppdrive.jp/cstart/ope/index4.html
    • good
    • 1
この回答へのお礼

回答ありがとうございます。確かに逆でしたσ^_^;読んでみたのですが、y=x++*10のときは、yにxの値を入れたものに10をかけ、この時++は無視するという認識で良いのでしょうか。

お礼日時:2018/05/09 21:00

>>この時++は無視するという認識で良いのでしょうか



ぜんぜん違う
    • good
    • 1

No.1 の runix2007 さんのおっしゃる通り、インクリメント演算++や--は変数の前に書く前置と後に書く後置では演算の順序が違うのが原因です


同一行に書くときの違いを意識する必要が有ります
++を他の演算から分けて、2行に分けて書くと
y = ++x*10;

x++;/* ここでは他の演算がないので、++xとしても同じ */
y = x * 10
と、
y = x++ * 10;

y = x * 10;
x++;/* ここでは他の演算がないので、++xとしても同じ */
と同じになります
    • good
    • 0
この回答へのお礼

回答ありがとうございます。/というのは別の行に分けるという意味ですよね。y=x++という式でcout<<y<<endl;とするとxそのものの値が出るので、そこに10をかけたら20になる。ということで良いのでしょうか。

お礼日時:2018/05/10 05:34

>yにxに1を足したものを入れた後に10倍するのですよね。


この理解が間違ってます。
yに入れるのは2回(xに1を足したものと、それを10倍にしたもの)ではなく、計算が終了したときの1回だけです。

y = ++x * 10;
xに1を足したものをxにいれ、つづいて10倍したものをyにいれる

y= x++ * 10;
xを10倍したものをyにいれ、つづいてxに1を足したものをxにいれる
    • good
    • 0
この回答へのお礼

回答ありがとうございます。完全に理解ができました!

お礼日時:2018/05/10 14:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!