HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0302
ぱる計算方法5解決


ぱる

リンク

2009/3/2(Mon) 14:45:46|NO.23682


#define A 640 #define B 20 #define C (A/3)-(B*2) mes A-B mes C mes 640-20-173 mes A-B-C
で計算すると、A-B-Cが447ではなく367になってしまいます。
A-BからCを引いているのではなく、(A/3)を引いてから(B*2)を引いているからのようです。
A-B-Cをしても447になるようにしたいのですが、いい解決策があればお願いします。



この記事に返信する


check

リンク

2009/3/2(Mon) 14:54:21|NO.23683

括弧の付いた式の勉強をしなおしたほうがいいんじゃないか?
mes A-B-C は展開すると
mes 640-20-213-40 になる
640-20=620 : 620-213=407 : 407-40=367 だろ?

A-B-Cを447にしたいのなら、
#define C (A/3)-(B*2) を
#define C ((A/3)-(B*2)) に変えればいい。



SYAM

リンク

2009/3/2(Mon) 15:04:09|NO.23684

もしわからないようなら、"変数への代入"と、"#define による定義"の違いを理解しないといけません。
変数はたとえば C=(A/3)-(B*2) と書けば右辺の"計算結果"の"値"が、 C という変数に代入されます。
#define というのは、本当にただ単純に、たとえばスクリプトの中で 「C」 と書いた部分が「(A/3)-(B*2)」というスクリプトに置き換わるというだけのものです。

そこまで理解できたらcheckさんの説明で完璧に納得できると思います。



ぱる

リンク

2009/3/2(Mon) 15:47:08|NO.23685

ありがとうございます。
分かりました解決です。



いなえ

リンク

2009/3/2(Mon) 16:10:10|NO.23686

解決しているようですが補足。
#defineの代わりに#constを使う手もありますよ。
#constなら計算後の値に置き換わるので余分に括弧を加える必要もありませんし、
コンパイル後の処理も少ない等いいことだらけです。



ぱる

リンク

2009/3/3(Tue) 09:41:05|NO.23696

いなえさん
ありがとうございます!



ONION software Copyright 1997-2023(c) All rights reserved.