2009-04-14 14 views
2

我试图用38替换整数的最后2位数字。我正在做如下所示的操作。替换整数的最后一位数字

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

我在假设编译器不会优化(num/100)* 100到num。如果发生这种情况,那么在上面的例子中,num将变成1335而不是1238.那么,在C中保证上面的表达式不会被优化吗?或者有没有更好的方法来取代最后2位数字?

回答

8

优化不应该影响程序的结果(除了它的代码大小和运行时间)。当他们这样做时,通常是因为你依赖于未定义的行为。

没有理智的编译器会用num来代替(num/100)*100。优化编译器远远比远得多。如果这对目标平台是一个明智的决定,编译器可能会将其优化到num - (num % 100)

我总是说“你的代码越容易让编译器理解,编译器就越容易应用最合适的优化”。你知道吗?通常编译器易于理解的代码对于人类来说也更容易理解。

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

如果你想刮另外六个字符,你甚至可以用“num - =(num%100)+ 38;” – 2009-04-14 04:09:11

相关问题