Ето моят код
#include <iostream>
static const unsigned long long int xx = (36 * 36 * 36 * 36) * (36 * 36 * 36 * 36);
static const unsigned long long int y = 36 * 36 * 36 * 36;
static const unsigned long long int yy = y * y;
int main()
{
std::cout << xx << std::endl;
std::cout << yy << std::endl;
return 0;
}
Това е резултатът от компилацията
# g++ -std=c++11 test.cpp -o test
test.cpp:2:62: warning: integer overflow in expression [-Woverflow]
static const unsigned long long int xx = (36 * 36 * 36 * 36) * (36 * 36 * 36 * 36);
Това е изходът за изпълнение
# ./test
18446744073025945600
2821109907456
Можете ли да обясните защо виждам това предупреждение и различни резултати? ако 36 може да се побере в char, тогава 36^8 може да се побере в unsigned long long int, така че не съм сигурен какъв е проблемът тук, моля за съвет. (Използвам gcc 4.9.2)