• 締切済み

i++ , ++1

a=5, y=3とします。 c=a++ -b の計算結果はどうなるのでしょうか?? aがa+=1される前にcに代入されるようなのですが cに5が代入されるのか、それとも cに5-3=2が代入されたあとに a=a+1が計算されるのでしょうか?? 結果的にc=2になるでしょうか?

みんなの回答

回答No.4

ANSI Cでは「二つの前後するシーケンスポイント間の変更前の値は、格納する値を決定する為にだけ使用する」ことを許していますので、c=a++ -b; は、c=a-b; a=a+1; と同じ動作です。

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

a, b, cの型にもよりますが、普通は、 (1) c = a - b; ++a; (2) c = a; c -= b; ++a; (3) c = a; ++a; c -= b; のどれかになることが多いかと思います。 ちなみに、 c = a++ + a; とした場合、オペランドの評価順序が不定ですので、結果がこうなると言い切れなくなります(未定義の動作ではありません)。 上記の(1)または(2)のときと、(3)のときで結果が変わる点に注目してください。 未定義の動作になるのは、副作用完了点に達する前に同じオブジェクトを複数回更新した場合です。 具体的には、 a = a++; のような状況のことをいいます。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

a++ は a の値をそのまま返し, ++a は a+1 の値を返します. そして, どちらも「その文を実行している途中のどこか」で a の値を 1 だけ増やします. だから, 実装上 c = a - b; a=a+1; としてもいいし a=a+1; c = (a-1)-b; としてもかまいません (理論上はほかのタイミングもあり得ますが, この場合にはどちらかのタイミングと全く同じ動作になります). 今の場合, どちらであってもその文の処理が終わったときには c = 2 となります. 上の 2つの例を見ればわかりますが, 「b」を評価するときには a の値が確定しません. そのため c = a++ + a; のような文を書いてしまうと「未定義動作」となり, 規格ではいかなる結果も保証しません. もちろんこんなわかりやすいことは普通はありえません. 実際には外部変数や関数呼び出しがからんできて, たとえば #include <stdio.h> int a; int return_a(void) { return a; } int main(void) { a=5; printf("%d\n", a++ + return_a()); return 0; } なんてやってしまうとアウトだったりします.

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

++i i++ はそれぞれ計算のタイミングが異なります c = a++ - b; ↓ c = a - b; a++; と解釈されると考えればよいです ただし c = a++ + a; なんていうのはどういう結果になるのかは不明ですので、注意 (言語規定でも決められていない)

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

関連するQ&A

  • エクセルで、入力数字を自動的に代入し結果表示させたい

    入力した数字を自動的に代入し、その結果をそれぞれ表示させるにはどうしたらよいのでしょうか。具体的には      A列         B列          C列 1行    10          20          A1またはB1を引っぱって表示 2行    30          40          C1がA1のときA2、C1がB1のときB2を表示 3行   C3結果表示   C3結果表示   C1+C2の計算式 A1、A2、B1、B2は手入力します。 C1でA1が代入された場合C2にはA2が代入され、C3はC1+C2を計算し、その結果40をA3に表示させる。 また、C1でB1が代入された場合C2にはB2が代入され、C3は計算結果60を表示させる。 というようにしたいのです。C1、C2、A3、B3にはどのような計算式を入れればよいのか教えてください。

  • エクセルの二つのセルの結果を結合して表示するには

    はじめまして。こんにちは。エクセルの使い方が分からなくて困っています。エクセルで例えばA1に4を代入し、B1に2を代入します。C1に計算式でA1+B1(6と表示される)を入れてD1に計算式でA1-B1(2と表示される)を代入します。そしてE1にC1の計算結果とD1の計算結果を結合したもの、結果的には6,2と表示させたいのですが、どうすればいいでしょうか?よろしくお願いします。

  • VBAで任意の範囲内のセル2個ずつを総当りでコピー

       シートA        シートB           シートC   A  B C D   A B  C   D     A  B   C  D 1 21 22 23 24  21 22 2122 2122'  2122 2122' 2                           2123 2123’ 3                           2124 2124' 4                           2223 2223' (1)シートAのA1、B1をコピーしてシートBのA1、B1に代入する。  シートBのC1、D1には計算式が入っており、結果が表示される。 (2)シートBのC1、D1の計算結果をシートCのA1、B1に代入する。 (3)次はシートAのA1、C1をコピーしてシートBのA1、B1に代入する。  シートBのC1、D1には計算式が入っているので結果が表示される。 (4)計算結果をシートCのA2、B2に代入する。 (5)同じ動作をシートAの一行目に数字がある場合は繰り返し行う。 (6)シートA(A1、B1)(A1、C1)(A1、D1)が終了したら  今度は(B1、C1)(B1、D1)と、  シートAのB1を、シートBのA1とB1に代入して、  計算された結果をシートCのA列、B列に代入していく。 (7)シートAのB1が終了したら、今度は(C1、D1)をシートBのA1、B1に代入し、  計算結果をシートCのA6、B6に代入する。 地域ごとの合併による効果に関する調査で使用したく、 シートAの一行目の数字を総当りさせる事が目的です。 上の説明では、シートAの一行目は4列しかなく、シートCに導き出される計算結果は6行だけですが、 実際の作業はシートAは130列ほどとなり、マクロで作ると8,000回の作業を しなくてはならないため、VBAでいろいろ試してみたのですが、 知識不足でうまくいかないため質問させていただきました。 また、シートBのC1とD1の計算式というのは、 シートBのA1とB1に数値を代入した際に、A列B列の2行目以下に 関数で数字を引っ張ってきて(総人口や産業別就労人口等)、 それらの数値を使った計算なので、シートAに計算式を入れるというのは少し難しいです。 どうぞよろしくお願いいたします。

  • 数Iの判別式の使い方

    高校生です。 判別式にa,b,cとかを代入して計算するってのは理解できるんですけど、判別式を、D=2a/-b…って使うのと、√のなかだけのb(二乗)-4acを使うときありますよね?! その違いってなんですか?分かりません。

  • VBAを使ってシートAの3ヶ所のセルでシートBの計算式を行う。

    シートA    シートB   A B C D     A B C D 1 10 20 30 ()   1 10 20 30 (計算式) 2 10 20 30 () 3 10 20 30 () 4 10 20 30 () (1)シートAのA1,B1,C1をコピーしてシートBのA1,B1,C1に代 入する。D1には計算式が入っているので結果が表示される。 (2)シートD1の計算結果をシートAのD1に代入する。 (3)次はシートAのA2,B2,C2をコピーしてシートBのA1,B1,C1 に代入する。D1には計算式が入っているので結果が表示される。  シートD1の計算結果をシートAのD2に代入する。 (4)上記の動作をシートAのA列のセルに数字がある場合は繰り返し行  う。

  • エクセル(Excel)の計算結果を行番号に反映させるには?

    エクセルのセル表記についてのご質問です。 計算結果をセルの表記に反映させたいと思っています。 例1: A1の計算結果が『2』 B1の計算結果が『3』 この場合は、C5(2+3=5)に、Z5からの値を代入する 例2: A1の計算結果が『10』 B1の計算結果が『15』 この場合は、C25(10+15=25)に、Z25からの値を代入する =$Z$(A1+B1) =$Z$[A1+B1] =$Z$'A1+B1' 上記のようなイメージです。 どなたか、お教えいただけると幸いです。 よろしくお願い致します。

  • パラメータからの説明についての件

    y=a b*exp(-(x-c)^2/d^2)に実践データを使用しフィッティングを行ったとします。 パラメータ推定の結果 a=6076.4 b=349.5 c=48.9558 d=0.09921 が得られたとします。 ここであるxの値を代入してy1を得ます。 その次に、新たにフィッティングに使用するデータを加えて、 フィッティングした結果、 a=6020.4 b=370.5 c=2.1092 d=0.00028 が得られたとします。 ここで、先ほどと同じxを代入してy2を得ます。 例えば、パラメータcの値が48→2に変わったから、y1→y2のような推移になった。 ということを調べることは可能でしょうか? 可能であればどのような方法がありますか? ※ここで示している値は適当です。

  • あるセル内の計算結果を固定数値として違うセルに代入する方法

    あるセルで計算した結果を違うセルの位置に固定数値として代入する方法はあるのでしょうか? 例えば、A1のセルに変数Xが入っており、B1のセルに変数Yが入っていたとします。 そしてC1のセルで、ある計算をしていたとします。 で、X=Yの条件を満たした時はC1のセルの計算結果の数値をセルD1に数値として自動で代入するという作業をやらせたいのです。 試しに適当なセルに、=IF(A1=B1,D1=C1,0)なんて式を作ってみましたが、当然のようにD1=C1なんて表現はできないのでエラーとなります。 D1のセルに=IF(A1=B1,C1,0)と入れれば、A1=B1の条件を満たした時だけはD1のセルにC1の計算結果が入りますが、D1のセル内が数値でなくあくまで条件式である以上、条件が変わればエクセル上のD1のセルの表示も変わってしまいます。あくまでC1の計算結果の数値をそのままD1に数値のデータとして入力させて記憶させておきたいのですが。 どうやったらいいのでしょうか? D1のセルに=C1と入れておけば、D1のセルにはC1の計算結果が常に表示されるわけですが、C1の計算自体が他のセルのデータによってその都度変動するため、D1も同じように変動してしまいます。 ですので、A1=B1を満たした時のC1の計算結果をD1に記憶させておくという作業をしたいわけなんです。

  • 円と接線の共有点を知りたい!!!

    エクセルで計算を行っています。 x^2+(y-3745.613)^2=3745613^2と y=0.33x/100+kのkの値を求めたいのですが、 ここで便利になってくるのが点と直線の公式です。 |ap+bq+c|/√(a^2+b^2)というのがあります。 ちなみに|と|の間は必ず絶対値です。 この時、円の中心は(0,3745.613)なのでpに0、qに3745.613。 y=0.33x/100+kを0.33x/10000-y+k=0に直して、 aに0.33/100、bに-1、cにkを代入します。 この結果、共有点はどことどこになるのでしょうか。 計算してみたけど 共有点が原点に比べ数千も離れていました。 どこがおかしいのでしょうか。

  • 数学I~IIの問題です。

    こんにちは!いつもお世話になっています。 数学I~IIの問題でどうしても理解できないところがあるので教えて下さい。 詳しい計算の過程を知りたいので、ぜひ書いていただきたいと思います。 回答のみはわかっているので載せておきます。参考にしてください。 ※普通の数は全角、累乗の場合の指数は半角英数で表しています。 ひとつずつでも全く構いませんのでよろしくお願いします! <数I> (1)4a2c2-(c2+a2-b2)2 回答◆(a+b+c)(-a+b+c)(a-b+c)(a+b-c) (2)(a-b)3+(b-c)3+(c-a)3 回答◆3(a-b)(b-c)(c-a) (3)(x+y+z)3-x3-y3-z3 回答◆3(x+y)(y+x)(z+x) 面倒かとは存じますがどうかよろしくお願いいたします!

このQ&Aのポイント
  • 会社と家の往復だけなら問題ないが例外あると不安に!障害者雇用で働いています
  • 仕事は順調で、職場で良くしてもらっています。普段、仕事が終わったらまっすぐ家に帰ってくるので何も不安はないのですが、今日、用事があり支援機関の事務所を訪れて面談をしてきました
  • 久しぶりにあった人と話すという機会が最近あまりなかったので普通に対応はできたのですが、家に帰ってきて、なにかぽっかり心にあながあいたように不安になってしまいました
回答を見る