2009-04-14 7 views
2

J'essaie de remplacer les 2 derniers chiffres d'un nombre entier par 38. Je le fais comme ci-dessous.Remplacer les derniers chiffres d'un entier

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

Qu'est-ce que je suppose est que le compilateur ne sera pas optimiser (num/100) * 100 à num. Si cela se produit alors dans mon exemple ci-dessus, num deviendra 1335 au lieu de 1238. Donc, est-il garanti en C que l'expression ci-dessus ne sera pas optimisée? Ou y at-il une meilleure façon de remplacer les 2 derniers chiffres avec un certain nombre?

Répondre

8

Les optimisations ne sont pas supposées affecter le résultat d'un programme (à part sa taille de code et son temps de fonctionnement bien sûr). Quand ils le font, c'est généralement parce que vous vous reposez sur un comportement indéfini.

Aucun compilateur sain ne remplacerait (num/100)*100 avec num. Optimisation des compilateurs sont loin, loin, plus intelligents que cela. Le compilateur peut l'optimiser à num - (num % 100), si cela est une décision raisonnable pour la plate-forme cible. Je dis toujours "plus votre code est facile à comprendre pour un compilateur, plus il sera facile au compilateur d'appliquer l'optimisation la plus appropriée". Et tu sais quoi? Habituellement, le code qui est facile à comprendre pour un compilateur est aussi plus facile à comprendre pour les humains.

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

Si vous voulez raser six caractères de plus, vous pouvez même utiliser "num - = (num% 100) + 38;" –

+0

Ce message ne répond pas à la plupart des questions du PO et n'explique pas comment (ou même si) il est meilleur que l'exemple fourni par le PO. – Artelius

+0

D'accord, même si le code est techniquement correct, la réponse est horrible d'un point de vue pédagogique. Le score actuel de 10 est beaucoup trop, -1 de moi. – hlovdal

Questions connexes