Возвести число в степень. Битовые операции - C (СИ)
Формулировка задачи:
Каким образом можно возвести число в некую степень при помощи битовых операций ?
Имеется ввиду быстрое возведение в степень.
Решение задачи: «Возвести число в степень. Битовые операции»
textual
Листинг программы
int binpow (int a, int n)
{
int res = 1;
while (n)
{
if (n & 1) res *= a;
a *= a;
n >>= 1;
}
return res;
}
void main(int argc,char* argv[])
{
int i;
for(i=0; i<=8; i++) printf("%d\n",binpow(2,i));
system("pause");
}
Объяснение кода листинга программы
- В функции
binpowпроисходит возведение числаaв степеньn. - Инициализируется переменная
resсо значением 1. - Запускается цикл
while, который выполняется до тех пор, покаnне станет равным 0. - Внутри цикла проверяется, является ли самый младший бит числа
nединицей. - Если это так, то значение переменной
resумножается наa. - Значение переменной
aумножается на само себя. - Самый младший бит числа
nсдвигается вправо на 1 позицию (начиная с 0). - Цикл продолжается до тех пор, пока
nне станет равным 0. - По завершении цикла возвращается значение переменной
res. - В функции
mainинициализируется переменнаяiсо значением 0. - Запускается цикл
for, который выполняется 9 раз. - Внутри цикла выводится на экран значение функции
binpowс аргументами 2 иi. - Переменная
iувеличивается на 1. - Цикл продолжается до тех пор, пока
iне станет равным 9. - В конце программы вызывается функция
system, которая приостанавливает выполнение программы до тех пор, пока пользователь не нажмет любую клавишу. - Программа завершается.