替换整数的最后一位数

时间:2009-04-14 03:21:47

标签: c

我试图用38替换整数的最后2位数。我正在这样做。

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

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

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:8)

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

没有理智的编译器会将(num/100)*100替换为num。优化编译器远远不够,远远超过智能。如果这对目标平台来说是明智的决定,编译器可能会将其优化为num - (num % 100)

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