Вот версия метода на C #:
int ipow(int base, int exp) {
int result = 1;
while (exp > 0) {
if ((exp & 1) != 0) {
result *= base;
}
exp >>= 1;
base *= base;
}
return result;
}
(Как отметил Джон, вам следует избегать использования base
в качестве имени переменной, однако я сохранил его в коде, чтобы сделать его похожим на Coriginal.)
Когда вы используете оператор &
для двух целых чисел (exp и 1), это бинарный оператор.Цель состоит в том, чтобы замаскировать наименьший значащий бит в значении exp.
Метод заключается в том, что он проходит через биты в значении exp и умножает базовые значения, умноженные, чтобы соответствовать значениюбиты в значении exp.
Если значение exp, например, равно 21, то это 10101 в двоичном формате со значениями битов 16 + 4 + 1.Вместо умножения базового значения в 21 раз оно умножается на 16 * базовое, 4 * базовое и 1 * базовое.