我试图用38替换整数的最后2位数。我正在这样做。
int num = 1297;
num = (num/100)*100 + 38;
我假设编译器不会优化(num / 100)* 100到num。如果发生这种情况,那么在上面的例子中,num将变为1335而不是1238.那么,在C中是否保证上述表达式不会被优化?或者有没有更好的方法用一些数字替换最后2位数?
答案 0 :(得分:8)
num = num - (num % 100) + 38;
答案 1 :(得分:8)
优化不应该影响程序的结果(除了代码大小和当然的运行时间)。当他们这样做时,通常是因为你依赖于未定义的行为。
没有理智的编译器会将(num/100)*100
替换为num
。优化编译器远远不够,远远超过远智能。如果这对目标平台来说是明智的决定,编译器可能会将其优化为num - (num % 100)
。
我总是说“编译器理解代码越容易,编译器就越容易应用最合适的优化”。你知道吗?通常,编译器易于理解的代码也更容易让人理解。