【发布时间】:2009-04-14 03:21:46
【问题描述】:
我正在尝试用 38 替换整数的最后 2 位。我正在这样做。
int num = 1297;
num = (num/100)*100 + 38;
我假设编译器不会将 (num/100)*100 优化为 num。如果发生这种情况,那么在我上面的示例中,num 将变为 1335 而不是 1238。那么,在 C 中是否保证上述表达式不会被优化?或者有没有更好的方法用某个数字替换最后 2 位数字?
【问题讨论】:
标签: c
我正在尝试用 38 替换整数的最后 2 位。我正在这样做。
int num = 1297;
num = (num/100)*100 + 38;
我假设编译器不会将 (num/100)*100 优化为 num。如果发生这种情况,那么在我上面的示例中,num 将变为 1335 而不是 1238。那么,在 C 中是否保证上述表达式不会被优化?或者有没有更好的方法用某个数字替换最后 2 位数字?
【问题讨论】:
标签: c
优化根本不应该影响程序的结果(当然除了它的代码大小和运行时间)。当他们这样做时,通常是因为您依赖于未定义的行为。
没有理智的编译器会用num 替换(num/100)*100。优化编译器远比这要聪明得多。编译器可能会将其优化为 num - (num % 100),如果这对目标平台来说是一个明智的决定。
我总是说“您的代码越容易让编译器理解,编译器就越容易应用最合适的优化”。你知道吗?通常编译器容易理解的代码也更容易被人类理解。
【讨论】:
num = num - (num % 100) + 38;
【讨论】: