C 替换整数的最后几位

C 替换整数的最后几位,c,C,我试图用38替换整数的最后2位。我是这样做的 int num = 1297; num = (num/100)*100 + 38; 我假设编译器不会优化(num/100)*100到num。如果发生这种情况,那么在上面的示例中,num将变成1335,而不是1238。那么,在C中是否保证上述表达式不会被优化?或者有没有更好的方法用数字替换最后2位?优化根本不会影响程序的结果(当然除了代码大小和运行时间)。当他们这样做时,通常是因为你依赖于未定义的行为 num = num - (num % 100)

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

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

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

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

num = num - (num % 100) + 38;
没有一个健全的编译器会用
num
替换
(num/100)*100
。优化编译器远比这聪明得多。编译器可能会将其优化为
num-(num%100)
,如果这是目标平台的明智决策


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

如果你想再去掉六个字符,你甚至可以使用“num-=(num%100)+38”;这篇文章没有回答OP的大多数问题,也没有解释它如何(或是否)比OP提供的示例更好。同意,虽然代码在技术上是正确的,但从教学的角度来看,答案是可怕的。目前的10分太多了,我得-1分。