Очень маловероятно, что он будет работать эффективно со сдвигом битов, поскольку он идеально подходит для деления на степени двух, из которых 10
равно , а не единица.
Возможностьдля улучшения, когда вы можете часто получать числа с большим количеством конечных нулей, используйте несколько циклов для выполнения работы большими кусками, например:
if (mantissa != 0) {
while (mantissa % 1000000 == 0) {
mantissa /= 1000000;
droppedZeros += 6;
}
while (mantissa % 1000 == 0) {
mantissa /= 1000;
droppedZeros += 3;
}
while (mantissa % 10 == 0) {
mantissa /= 10;
droppedZeros++;
}
}
Это обычно приводит к меньшему количеству выполняемых инструкций, но, как и в случае всех оптимизаций, измерения, не догадайтесь! Возможно, сложность добавленного кода не стоит тех выгод, которые вы получаете (если есть).
Обратите внимание, что я также обнаружил случай mantissa == 0
, поскольку это приведет к бесконечному циклу в вашем исходном коде.
Другая возможность, которую вы, возможно, захотите рассмотреть, - это если вы выполняете эту операцию с одним и тем же элементом несколько раз.Например, допустим, у вас есть коллекция целых чисел, и каждый раз, когда вам нужно обработать одно из них, вы должны убрать и посчитать конечные нули.
В этом случае вы можете на самом деле храните их по-другому.Например, рассмотрим структуру (псевдокода):
struct item:
int originalItem
int itemWithoutZeroes
int zeroCount
По сути, всякий раз, когда вы впервые получаете элемент (например, 1234560000
), вы сразу же конвертируете его в структуру один раз и один раз.только :
{ 1234560000, 123456, 4 }
Это обеспечивает кэшированную версию элемента с нулевым символом, так что вам больше не придется рассчитывать его снова.
Итак, если вы хотите получить очищенную мантиссу, выпросто используйте item.itemWithoutZeros
.Если вы хотите вывести число в исходном виде, вы можете использовать item.originalItem
.И, если вам нужно количество нулей, используйте item.zeroCount
.
Очевидно, это займет больше места для хранения, но вы часто обнаружите, что оптимизация - это компромисс времени и пространства.