如何在C ++中将大数字(长10位)存储为键值,作为无序映射中的键的值。我收到此警告-“警告:隐式常量转换[-Woverflow]中的溢出”。对应的所有值键的打印方式与初始化时不同。
答案 0 :(得分:1)
在典型的现代硬件上,int
具有32位,以二进制补码方式允许的值范围为[-2147483648; 2 147 483]。如果您的值不适合此范围,则需要更大的数据类型。
但是请注意,该标准仅保证[-32767; [32767],实际上,存在int
甚至今天仅使用16位的硬件(如果您想知道为什么不这样做-32768:嗯,标准还涵盖了基于补码或符号幅度的体系结构...)。
通常,long也具有32位范围(这是标准的最小范围)(例如,在64位linux上,它具有64位),并且long long至少可保证与64位一样大。 / p>
很混乱,如您所见...如果需要保证范围,最好的办法是使用<cstdint>
标头中的数据类型,例如int64_t
(或者-如果您不需要, t处理负值-最好是uint64_t
)。
还有许多其他有用的类型,例如。 G。 uint_least8_t
(至少8位的最小数据类型–如果您编写可移植的代码,并且需要涵盖可能无法提供uint8_t
的平台)或uint_fast8_t
({至少8位可以在给定平台上最快访问;通常,它比uint8_t
大。好奇吗?为什么不读一点further?
答案 1 :(得分:-3)
在c ++ int中可以存储这么多
int 4个字节-2147483648至2147483647
long int(或long long)可以存储-9223372036854775808到+9223372036854775807
或者您可以直接使用unsigned long int,它可以存储0到18446744073709551615
为更大的数字,那么您可以尝试增强库或尝试创建一个基于字符串的函数来保存它,并在需要时将其转换为数学运算