Заменить последние цифры целого числа - PullRequest
2 голосов
/ 14 апреля 2009

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

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

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

Ответы [ 2 ]

8 голосов
/ 14 апреля 2009

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

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

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

8 голосов
/ 14 апреля 2009
num = num - (num % 100) + 38;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...