2009-04-14 10 views
2

整数の最後の2桁を38で置き換えようとしています。以下のようにしています。整数の最後の数字を置換する

int num = 1297; 
num = (num/100)*100 + 38; 

コンパイラは(num/100)* 100〜numを最適化しないと仮定しています。それが私の上記の例で起こると、numは1238ではなく1335になります。したがって、Cでは上記の式が最適化されないことが保証されていますか?または、最後の2桁をいくつかの数字に置き換えるより良い方法はありますか?

答えて

8

た最適化は、(離れてそのコードサイズと実行中のコースの時から)のすべてのプログラムの結果に影響することになっていません。彼らがそうするとき、あなたが未定義の振る舞いに頼っているからです。

(num/100)*100numに置き換えます。コンパイラの最適化は遠く、遠く、遠くにはよりもスマートです。コンパイラは、ターゲットプラットフォームに対して合理的な決定であれば、num - (num % 100)に最適化することができます。

私はいつも「あなたのコードはコンパイラが理解しやすいほど、コンパイラが最適な最適化を適用しやすくなります」と言います。そしてあなたは何を知っていますか?通常、コンパイラが理解しやすいコードは、人間が理解しやすいものです。

8
num = num - (num % 100) + 38; 
+0

別の6文字を削っていたい場合は、「num - =(num%100)+ 38;」と入力することもできます。 –

+0

この投稿はOPの質問のほとんどには答えておらず、OPが提供した例よりも(もしそうであっても)どうやって説明されているのか分かりません。 – Artelius

+0

コードは技術的には正解ですが、答えは教育的観点からは恐ろしいものです。 10の現在のスコアはあまりにも多く、-1私からです。 – hlovdal

関連する問題