为什么我不能使用长整型?C++

Why can't I use a long long int type ? c++

本文关键字:长整型 C++ 不能 为什么      更新时间:2023-10-16

我尝试

long long int l = 42343254325322343224;

但无济于事。为什么它告诉我,"整数常量太长了。"我使用的是long-long-int类型,它应该可以容纳19位以上的数字。我是在这里做错了什么,还是有一个我还不知道的特殊秘密?

因为在我的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

您不应该将数字的数量与表示数字所需的位数混淆

看看Boost.在Boost.多精度

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

以下是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!

整数文字的值似乎超过了类型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

考虑到在一般情况下,不需要为大到只能存储在类型long long int中的整数十进制文字指定后缀ll。编译器本身将为整数十进制文字确定最合适的类型(intlong intlong long int)。