IF文内の計算式 – プログラミング – Home

通知
すべてクリア

[解決済] IF文内の計算式


しまお
 しまお
(@しまお)
ゲスト
結合: 20年前
投稿: 13
Topic starter  

初歩的な質問で恐縮です。

if((buff++) > 10){
buff = 1;
}

なんて構文を使ってみた場合、buffがインクリメント
されるタイミングがif評価をした後の様な動きをしてしまっています。
if内に計算式を入れているのも問題だと思っていますが、
動作としてどうなんでしょうか?
ちなみにVC++(Ver6.0)を使っています


引用未解決
トピックタグ
ん
 ん
(@ん)
ゲスト
結合: 23年前
投稿: 106
 

if((buff++) > 10){
buff = 1;
}
これは、buffがインクリメントされるのは if比較の後

if((++buff) > 10){
buff = 1;
}
これは、buffがインクリメントされるのは if比較の前

確か、こんな感じだったと思います。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

説明内容に関しては、んさんが書かれている通りです。
ただ、この部分がわからないということは入門書等を読まれていないのではないかと
いう気がします。前置インクリメント演算子と後置インクリメント演算子の説明は
C++言語の入門書には必ずあると思います。
もし、本を持っていないようでしたら購入して読まれる事をお勧めします。


返信引用
しまお
 しまお
(@しまお)
ゲスト
結合: 20年前
投稿: 13
Topic starter  

たしかに入門書はしっかりと読んでませんでした。
持ってもいないので、購入します。(高いのが痛いですが)
お勧めがあれば教えてください。

それと、
前置インクリメント演算子と後置インクリメント演算子については
判っているつもりでしたが、
if(buff++ > 10)
だと、んさんが書かれているとおりだと思っていましたが、
if((buff++) > 10)
の場合、後置インクリメントがあっても()が
あるので、if比較の前にインクリメントさせるのかな?と思っていたんですが


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

前置とか後置の効力が現れるか否か境目は一つの解釈単位が基本だったと思います。
括弧は演算の順番を確定させるための物であり、解釈単位を変更する物ではないと
記憶しています。
ですから、if文の解釈単位は、ifに続くひとまとまりだと考えていいと思います。
セミコロンがある場合はもっとはっきりしていて「;」が解釈単位の終了を示すはずなので
これが前置と後置の効果が現れる境になると言う話だったと思います。


返信引用
しまお
 しまお
(@しまお)
ゲスト
結合: 20年前
投稿: 13
Topic starter  

んさん、PATIOさん
ありがとうございます。
スッキリしました。
実は人の作ったソースで、自分では
if((buff++) > 10){
の様な書き方はしないもので悩んでました。
これからもよろしくお願いします。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

いつインクリメントされるかというのは
式の評価にはあまり関係ないです。

buff++ の計算結果は「buffに1足す前の値」
++buff の計算結果は「buffに1足した後の値」
というだけです。

++演算子だと混乱するかもしれませんが、
2*buff の計算結果は「buffの2倍の値」
というのと同じ事です。

で、
○○ > 10
は、○○の計算結果が 10より大きいかを比較しています。
この比較をするときに、計算の元になった変数に
今どんな数字が入っているかという情報は影響しません。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

確かにそうですね。
比較演算子に引き渡されるのはあくまでもインクリメント演算子の計算結果であって
インクリメントされている変数の値ではありませんからね。
そういう意味では今回の話とは直接関係なかったかな。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました