Mam następującą funkcję zasilania, która działa na całkowite i to działa dobrze:unsigned long long int pow
int ipow(int base, int exp)
{
int result = 1;
while(exp)
{
if (exp & 1)
{
result *= base;
}
exp >>= 1;
base *= base;
}
return result;
}
Teraz chciałbym mieć wersję, która pozwala exp> 32. Tak więc używać unsigned long długie ints:
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;
}
Ale ta druga wersja nie wydaje się działać:
unsigned long long int x;
x = ipow(2, 35);
printf("%llu\n", x);
to wyjście będzie 0.
Na czym polega problem z niepodpisanym długofalowym wdrożeniem?
Rzeczywiście, wielkie dzięki, działa już teraz! – DanielFetchinson