A 回答 (9件)
- 最新から表示
- 回答順に表示
No.9
- 回答日時:
なるほどそういうわけでしたか > #8
おそらく間違いなくそうだろうな(as-if ルールのこと)だろうなとは思ったのですが、規格が見つけられなくて、「わかっている」という状況ではなかったのでありました。
ありがとうございました。
No.8
- 回答日時:
分かっているとは思われるが蛇足的に:
as-if ルール (5.1.2.3) により, h のデクリメントはしなくてもいいです>#7. とはいえ, g をインクリメントするんだとしたらどことなく中途半端な香りが漂う.
まあ, GCC で最適化かけると変数が全部なくなりますが.
No.7
- 回答日時:
さらについでをいえば、演算子の優先順序はあくまでも結合の優先順序であって、時間的に「先に計算される」というのも保証の限りではありません。
さらについでにいえば、
int main()
{
int g = 10;
int h = 5;
int i = ++g / h--;
printf("i = %d", i);
return 0;
}
というソースを C++Builder XE でコンパイルしてみたら、h をデクリメントするコードは生成されませんでした。
確かに(このあと h は使われないので)実害はないのですが、それで良いのか? とちょっとだけ思いました。
No.6
- 回答日時:
ついでにいうと
「++gは前置なのでまずこれが処理され、g=11となります。
h--は後置なので、一連の処理が終わった「後で」処理されます。」
も正確じゃないですけど>#5.
g が 10 のときに ++g があったらそれは 11 と評価される. で, 次の副作用完了点までのどこかで g の値が 11 になる. 同じように, h = 5 のときに h-- は 5 と評価され, 次の副作用完了点までのある時点で h が値が 4 になる. ついでにいえば i = ++g/h-- を評価すると 2 になり, 次の副作用完了点までのどこかで i は 2 となる.
全て「次の副作用完了点までのどこか」でしかなく, 正確にいつかはわからない (しそれに依存してはいけないので知る必要もない) というのは頭に入れておかないとダメですよね.
No.5
- 回答日時:
……おお、風邪でぼーっとしててミスした。
># i = ++h + j + hh++;とか。
は
# i = ++h + j + h++;とか。
です。
さて、
10 / 5が2というのは納得いくが、
11 / 5とか、11 / 4が2は変だろ!!!
というとであれば…既に沢山ついている「型」について勉強し直しましょう。
# そういう意味で「例が悪い」と書いています。
# ++や--が先に実行されようが後に実行されようが、int型である限り2にしかなりませんから。
printf("10/5=%d\n" , 10 / 5);
printf("11/5=%d\n" , 11 / 5);
printf("11/4=%d\n" , 11 / 4);
をお試しあれ。
No.4
- 回答日時:
これがわからないという場合、自分は、どう解釈したので、こうなるはずなのに、実際はこうなった。
と、そういう情報をつけるといいかと思います。
g, h, i がすべて int だとすると、これは、正しい動作です。
i だけが int で他が double でも正しい動作です。
なので、「どういう解釈をしたので、自分の意見と合わない」という情報があれば良いかなとは思います。
No.1
- 回答日時:
「前置」と「後置」で動作が違うのですが、そのあたりは理解されています?
そして…例が悪いですねぇ……。
>g=10, h=5としたときに
>i = ++g / h--
++gは前置なのでまずこれが処理され、g=11となります。
h--は後置なので、一連の処理が終わった「後で」処理されます。
i = 11 / 5
が実行されてi=2になります。(int型であれば端数は切り捨てられます)
その後で、後置になっているh--が実行されh=4となります。
なにか問題でも?
# 型が不明ですので、全てint型前提になっていますが…
iがfloatやdoubleでもgとhがintなら結果として端数は切り捨てられます。(どっちかキャストしましょう)
ちなみに、1つの式の中で同じ変数に対するインクリメント/デクリメントが複数回出てきた場合の動作は未定義となっていたハズですのでご注意を。
# i = ++h + j + hh++;とか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 「+−×÷(四則演算)」。 演算において、これ以外に考えられる方法は無いのでしょうか? 9 2022/06/03 03:24
- その他(教育・科学・学問) 採用予定数76人、受験者数169人 最終合格率、72人で合格倍率は、2.3倍 です。この試験って難し 2 2023/07/01 21:12
- 数学 代数学でわからないところがあるので教えていただきたいです。 S={x,y,z}を濃度3の集合とする。 3 2022/11/13 06:05
- その他(病気・怪我・症状) 突然、計算ミス(四則演算)が多発し始めました。 本当に急に、3x3x3などの単純な計算を81としたり 1 2022/05/27 23:27
- 世界情勢 防衛費の増額は必要ですか? また、分配優先順位は? 19 2022/12/28 11:13
- Access(アクセス) スキルシートのエクセルの項目に 2 2023/04/04 22:41
- 数学 「数学(一般論・四則演算など)」は、どうやって「♂。。。ハッテン。。。♂」したのですか? 2 2022/04/13 18:52
- その他(悩み相談・人生相談) 僕の家族は、父、母、長男、姉、次男、僕の6人家族です 僕の家族はいつからか、家族内で優先順位が出来ま 3 2022/06/12 04:14
- 建築学 二級建築士の構造力学についての質問です。 1 2023/03/05 06:37
- 数学 問題 9,1,6,9の4つの数字をこの順に四則計算の記号「+、−、×、÷」や()でつないで答えが3に 4 2023/05/18 18:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
VBA SaveChanges 上書きされない
-
VBAでループ内で使う変数名を可...
-
switch の範囲指定
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
VBの質問#if 0 then ってどう...
-
DoEventsがやはり分からない
-
findは動くがfindnextがマクロ...
-
EXCEL VBA マクロ 実行する度に...
-
リョウ・・・量?料?
-
【Excel】特定の文字を含むセル...
-
Excel VBAにて2つの処理を同時...
-
Select Case文でこのようなこと...
-
VBAでセルに値が入力されるまで...
-
月度は何て読みますか?
-
Do~Loopした回数をカウントしたい
-
iD
-
FFTの結果ついて
-
Loadイベント中にほかのイベン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
EXCEL VBA マクロ 実行する度に...
-
DoEventsがやはり分からない
-
UMLでの例外処理
-
月度は何て読みますか?
-
switch の範囲指定
-
VBの質問#if 0 then ってどう...
-
セルの値が0はクリアするマクロ
-
VB.NET Excelを読み込んでDataT...
-
Do~Loopした回数をカウントしたい
-
Loadイベント中にほかのイベン...
-
Select Case文でこのようなこと...
-
findは動くがfindnextがマクロ...
-
緊急です。 知り合いから50kgの...
-
リョウ・・・量?料?
-
理不尽、行き場のないイライラ...
おすすめ情報