У меня есть следующие функции питания, которая работает с целыми числами и она отлично работает:неподписанных долго долго ИНТ пау
int ipow(int base, int exp)
{
int result = 1;
while(exp)
{
if (exp & 1)
{
result *= base;
}
exp >>= 1;
base *= base;
}
return result;
}
Теперь я хотел бы иметь версию, которая позволяет Exp> 32. Таким образом, я использую неподписанный долгий длинные Интсы:
unsigned long long int ipow(int base, int exp)
{
unsigned long long int result = 1ULL;
while(exp)
{
if (exp & 1)
{
result *= (unsigned long long int)base;
}
exp >>= 1;
base *= base;
}
return result;
}
Но эта вторая версия, кажется, не работает:
unsigned long long int x;
x = ipow(2, 35);
printf("%llu\n", x);
это будет выводить 0.
В чем проблема с моей неподписанной длинной длинной реализацией?
Действительно, спасибо большое, сейчас работает! – DanielFetchinson