Объясните пожалуйста

01.01.2001

Объясните пожалуйста.
Задание: Написать подпрограмму, которая вычисляет натуральный степень числа.
Код C++
#include
using namespace std;
double power(double x,int n)
{double r=1; while(n){if(n&1)r=r*x,n--; x=x*x; n>>=1;} return r;}
int main(){
double x; int n; cout<<"Vvedite chislo i stepen\n"; cin>>x>>n; cout<< power(x,n)<< endl;
system("pause");}

Что происходит в строке {double r=1; while(n){if(n&1)r=r*x,n--; x=x*x; n>>=1;} return r;}
Объясните пожалуйста.

  • Это реализация алгоритма быстрого возведения в степень. Конкретно по пунктам:

    if(n&1) — проверяется нечётность числа n.

    r=r*x,n--; — это оператор запятая.

    n>>=1 — это присваивание с побитовым сдвигом вправо, краткая запись для n = n>>1, где n>>1 — операция сдвига числа n вправо на один бит (по сути, деление n на 2).

  • в указанной строке по-хорошему 10 строк.
    просто автор уверен, что кодинг-стайл - говно, монитор маленький а читабельный код никому не нужен.
    расставь переносы и спроси, что конкретно тебе не ясно

Вас заинтересует