为什么我不能使用长整型?C++
Why can't I use a long long int type ? c++
我尝试
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 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
考虑到在一般情况下,不需要为大到只能存储在类型long long int
中的整数十进制文字指定后缀ll
。编译器本身将为整数十进制文字确定最合适的类型(int
、long int
或long long int
)。
相关文章:
- C 字符串返回字符串的整数/双精度/长整型值
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 将长整型值打印为带有前导零的十六进制
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 将最小值整数转换为无符号长整型
- 如何将小端格式的QByteArray转换为无符号长整型
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 环礁和(长整型)的区别?
- 将逗号格式化为长整型整数
- 如何将长整型传递给 itoa 函数?
- 是否存在将长整型转换为指针有效的情况
- 在 C++ 中创建一对长整型和矢量时出现编译错误
- 当我使用长整型时,我的代码不起作用,它与 int 一起工作得很好
- 将字符串中以十六进制形式存储的负长整型值转换为 C++ 中的长整型变量
- 为什么当我们把变量"u"的数据类型从长整型更改为整型时,模幂会出错?
- 错误:请求从 std::chrono::time_point 浮点数转换为非标量类型长整型
- 如何以优雅高效的方式将无符号/有符号整数/长整型转换为 C 字符串?
- 将 BYTE 数组转换为无符号长整型