如何找到整数类型在C++中可以表示的值范围?

Bil*_*ard 11 c++ types

C++中整数值类型的大小和范围是特定于平台的.在大多数32位系统上找到的值可以在变量中找到.数据类型.- C++文档.您如何确定特定系统的实际大小和范围?

Ada*_*dam 38

C风格

limits.h包含int和其他数据类型的最小值和最大值,这些值应该是您需要的:

#include <limits.h> // C header
#include <climits> // C++ header

// Constant containing the minimum value of a signed integer (–2,147,483,648)
INT_MIN; 

// Constant containing the maximum value of a signed integer (+2,147,483,647)
INT_MAX;
Run Code Online (Sandbox Code Playgroud)

有关常量及其常用值的完整列表,请查看:Wikipedia - limits.h


C++风格

有一个基于模板的C++方法,正如其他评论者提到的那样:

  #include <limits>

  std::numeric_limits
Run Code Online (Sandbox Code Playgroud)

看起来像:

  std::numeric_limits<int>::max();
Run Code Online (Sandbox Code Playgroud)

它甚至可以做更多的工具,例如确定可能的数字位数或数据类型是否已签名:

  // Number of digits for decimal (base 10)
  std::numeric_limits<char>::digits10;

  // Number of digits for binary
  std::numeric_limits<char>::digits;

  std::numeric_limits<unsigned int>::is_signed;
Run Code Online (Sandbox Code Playgroud)

  • 如果你还包括windows.h,请注意win32,max被定义为宏,你会得到奇怪的编译行为. (2认同)
  • @Doug T.:使用(std :: numeric_limits <int> :: max)()代替,或在此调用之前取消定义最大值. (2认同)

Nem*_*vic 9

看一眼 std::numeric_limits


Dou*_* T. 6

为什么不确定并使用boost的数字类型?

即:

boost::uint32_t
boost::int32_t
Run Code Online (Sandbox Code Playgroud)

等等

  • 这很好,我说唯一真正的问题是对boost库的依赖. (3认同)