为什么我不能使用long long int类型? C ++

时间:2014-10-24 20:04:52

标签: c++ integer

我试试

long long int l = 42343254325322343224;

但无济于事。它为什么告诉我,"整数常数太长。"我正在使用long long int类型,它应该能够容纳超过19位数。我在这里做错了还是有一个我不知道的特别秘密?

3 个答案:

答案 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.Multiprecision

处查看Boost.Multiprecision

它定义了模板和类来处理更大的数字。

以下是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 intunsigned 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中编译器本身将确定最多适当的类型(intlong intlong long int)用于整数十进制文字。