如何将数字的后3位数转换为0
例如3444678到3444000
我可以这样做
(int)(3444678/1000)*1000 = 3444000
但划分和乘法可能代价高昂......
任何其他解决方案????
你可以试试
n - (n % 1000)
但模数运算符可能与分区一样昂贵.无论如何,这听起来很像微优化.这真的是你的瓶颈吗?
转移技巧,然后:
n >>= 3; n -= n % (5 * 5 * 5); n <<= 3;
它更快吗?疑.
但这是一个有趣的事实:gcc不使用除法/模数:
n -= n % 1000;
它乘以一些疯狂的数字(274877907)并做一些其他可能更快的东西.
这个故事的寓意:代码对编译器的目的越明显,编译器就越有可能以你从未想到的方式对其进行优化.如果代码更易于人类理解,那就是另一个奖励.