Степенная функция (написана на с ++) ...
long power (long a, long b){
long result=1l;
for (int i = 0;i<b;i++){
result*=a;
}
return result;
}
Теперь я провожу тестирование выходных данных ...
cout<<power(2l,2l)<<endl;
cout<<power(2l,4l)<<endl;
cout<<power(2l,31l)<<endl;
cout<<power(2l,32l)<<endl;
cout<<power(2l,61l)<<endl;
Выход:
4
16
-2147483648
0
0
Что ж, похоже, есть некоторая проблема с длинным отступлением до 32-битного размера (вместо того, чтобы оставаться как 64-битный). Мне интересно, почему это не работает, но если я использую тип long long
, все работает нормально.
Дополнительная информация:
Я использую C ++ и компилятор MinGW
Я использую 64-битную ОС (Windows 7)
UPDATE:
Вы, ребята, потрясающие! Никогда не думал, что это будет происходить.
Я только что проверил некоторые произвольные PDT, используя sizeof
, и это то, что я нашел ...
cout<<sizeof(long)<<" "<<sizeof(int)<<" "<<sizeof(char)<<" "<<sizeof(long long)<<" "<<sizeof(uint64_t)<<endl;
Выход:
4 4 1 8 8
Итак, похоже, что мои long
и int
имеют размер 32 бита. Еще немного игры показывает, что тип intmax_t также 64-битный. Практически каждый PDT ограничен 64 битами, поэтому, если мне когда-нибудь понадобится представить 128-битное целое число, есть ли в c ++ встроенный класс для этого (что-то похожее на BigInteger
в Java)?