Вот мой код
#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)