我试试
long long int l = 42343254325322343224;
但无济于事。它为什么告诉我,"整数常数太长。"我正在使用long long int类型,它应该能够容纳超过19位数。我在这里做错了还是有一个我不知道的特别秘密?
答案 0 :(得分:5)
因为在我的x86_64系统上,2^64
// 42343254325322343224
// maximum for 8 byte long long int (2^64) 18446744073709551616
// (2^64-1 maximum unsigned representable)
std::cout << sizeof(long long int); // 8
您不应该将位数与表示数字所需的位数混淆
答案 1 :(得分:4)
它定义了模板和类来处理更大的数字。
以下是Boost教程中的示例:
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
int128_t v = 1;
// Do some fixed precision arithmetic:
for(unsigned i = 1; i <= 20; ++i)
v *= i;
std::cout << v << std::endl; // prints 20!
// Repeat at arbitrary precision:
cpp_int u = 1;
for(unsigned i = 1; i <= 100; ++i)
u *= i;
std::cout << u << std::endl; // prints 100!
答案 2 :(得分:3)
似乎整数文字的值超过了类型long long int
尝试使用以下程序来确定类型long long int
和unsigned long long int
#include <iostream>
#include <limits>
int main()
{
std::cout << std::numeric_limits<long long int>::max() << std::endl;
std::cout << std::numeric_limits<unsigned long long int>::max() << std::endl;
return 0;
}
我在www.ideone.com上得到了以下结果
9223372036854775807
18446744073709551615
您可以将其与您指定的值进行比较
42343254325322343224
考虑到一般情况下没有必要为整数十进制文字指定后缀ll
,该文字太大而只能存储在类型long long int
中编译器本身将确定最多适当的类型(int
或long int
或long long int
)用于整数十进制文字。