1

什么会保持像 3000000^2 这样的东西而不会溢出?

4

4 回答 4

5

3000000^2 小于 2^48,因此uint64_tfrom cstdintorstdint.h将保留您的号码并保持良好的边距。

于 2012-04-07T07:12:59.537 回答
2

64位整数:

long long int
于 2012-04-07T07:11:15.953 回答
2

您可以使用std::numeric_limits. 在 c++11 中,long long是至少 64 位的标准整数,因此,例如,unsigned long long有以下限制:

#include <iostream>
#include <limits>


int main() {
  std::cout << "sizeof : " << sizeof(unsigned long long) << "\n"; 
  std::cout << "min    : "<< std::numeric_limits<unsigned long long>::min() << "\n";
  std::cout << "max    : "<< std::numeric_limits<unsigned long long>::max() << "\n\n";
}

在我的平台上制作:

sizeof : 8
min    : 0
max    : 18446744073709551615

C++ 提供了各种整数类型,但据我所知,标准 pre-c++11 并未强制要求 64 位类型。Ilong long是唯一一个至少为 64 位的标准整数,因此您需要一个支持 c++11 的编译器。但可能是您的编译器支持其他一些非标准的 64 位类型。

于 2012-04-07T07:16:27.373 回答
1

当您说“类似”时,这表明您实际上不确定要存储的数字有多大。

看看这里(比如说),看看哪种数字类型最适合您的应用程序。

请注意,该列表中有 64 位整数;那是因为它并非随处可见。

于 2012-04-07T07:15:59.507 回答