如何将数字的后3位数转换为0

ana*_*and 2 math optimization

如何将数字的后3位数转换为0

例如3444678到3444000

我可以这样做

(int)(3444678/1000)*1000 = 3444000

但划分和乘法可能代价高昂......

任何其他解决方案????

Jes*_*der 11

你可以试试

n - (n % 1000)
Run Code Online (Sandbox Code Playgroud)

但模数运算符可能与分区一样昂贵.无论如何,这听起来很像微优化.这真的是你的瓶颈吗?


Art*_*ius 5

转移技巧,然后:

n >>= 3;
n -= n % (5 * 5 * 5);
n <<= 3;
Run Code Online (Sandbox Code Playgroud)

它更快吗?疑.

但这是一个有趣的事实:gcc不使用除法/模数:

n -= n % 1000;
Run Code Online (Sandbox Code Playgroud)

它乘以一些疯狂的数字(274877907)并做一些其他可能更快的东西.

这个故事的寓意:代码对编译器的目的越明显,编译器就越有可能以你从未想到的方式对其进行优化.如果代码更易于人类理解,那就是另一个奖励.