整数の最後の2桁を38で置き換えようとしています。以下のようにしています。整数の最後の数字を置換する
int num = 1297;
num = (num/100)*100 + 38;
コンパイラは(num/100)* 100〜numを最適化しないと仮定しています。それが私の上記の例で起こると、numは1238ではなく1335になります。したがって、Cでは上記の式が最適化されないことが保証されていますか?または、最後の2桁をいくつかの数字に置き換えるより良い方法はありますか?
整数の最後の2桁を38で置き換えようとしています。以下のようにしています。整数の最後の数字を置換する
int num = 1297;
num = (num/100)*100 + 38;
コンパイラは(num/100)* 100〜numを最適化しないと仮定しています。それが私の上記の例で起こると、numは1238ではなく1335になります。したがって、Cでは上記の式が最適化されないことが保証されていますか?または、最後の2桁をいくつかの数字に置き換えるより良い方法はありますか?
た最適化は、(離れてそのコードサイズと実行中のコースの時から)のすべてのプログラムの結果に影響することになっていません。彼らがそうするとき、あなたが未定義の振る舞いに頼っているからです。
(num/100)*100
をnum
に置き換えます。コンパイラの最適化は遠く、遠く、遠くにはよりもスマートです。コンパイラは、ターゲットプラットフォームに対して合理的な決定であれば、num - (num % 100)
に最適化することができます。
私はいつも「あなたのコードはコンパイラが理解しやすいほど、コンパイラが最適な最適化を適用しやすくなります」と言います。そしてあなたは何を知っていますか?通常、コンパイラが理解しやすいコードは、人間が理解しやすいものです。
num = num - (num % 100) + 38;
別の6文字を削っていたい場合は、「num - =(num%100)+ 38;」と入力することもできます。 –
この投稿はOPの質問のほとんどには答えておらず、OPが提供した例よりも(もしそうであっても)どうやって説明されているのか分かりません。 – Artelius
コードは技術的には正解ですが、答えは教育的観点からは恐ろしいものです。 10の現在のスコアはあまりにも多く、-1私からです。 – hlovdal