2009-04-14 2 views
2

Я пытаюсь заменить последние 2 цифры целого числа на 38. Я делаю это, как показано ниже.Замените последние цифры целого числа

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

Что я предполагаю, так это то, что компилятор не будет оптимизировать (num/100) * 100 to num. Если это произойдет, то в моем примере выше num станет 1335 вместо 1238. Таким образом, гарантировано ли в C, что вышеприведенное выражение не будет оптимизировано? Или есть лучший способ заменить последние 2 цифры на некоторый номер?

ответ

8

Оптимизация не должна влиять на результат программы вообще (за исключением ее размера кода и времени выполнения, конечно). Когда они это делают, это обычно происходит потому, что вы полагаетесь на неопределенное поведение.

Никакой разумный компилятор не заменит (num/100)*100num. Оптимизация компиляторов далеко, далеко, далеко умнее этого. Компилятор может оптимизировать его до num - (num % 100), если это разумное решение для целевой платформы.

Я всегда говорю: «Чем проще код для понимания компилятором, тем проще будет использовать компилятор для наиболее подходящей оптимизации». И знаешь, что? Обычно код, который легко понять компилятору, также легче понять людям.

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

Если вы хотите сбрить еще шесть символов, вы можете даже пойти с «num - = (num% 100) + 38;» –

+0

Это сообщение не отвечает на большинство вопросов OP и не объясняет, как (или даже если) оно лучше, чем пример, предоставленный OP. – Artelius

+0

Согласитесь, в то время как код технически правильный, ответ ужасен с педагогической точки зрения. Текущая оценка 10 слишком много, -1 от меня. – hlovdal