【问题标题】:Replace last digits of an integer替换整数的最后一位
【发布时间】: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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:
      num = num - (num % 100) + 38;
      

      【讨论】:

      • 如果你想再去掉六个字符,你甚至可以使用 "num -= (num % 100) + 38;"
      • 这篇文章没有回答大部分 OP 的问题,也没有解释它是如何(或者即使)它比 OP 提供的示例更好。
      • 同意,虽然代码在技术上是正确的,但从教学的角度来看,答案是可怕的。目前的 10 分太高了,我是 -1。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      相关资源
      最近更新 更多