确定各种类型的最大值和最小值的方法

时间:2017-09-24 19:13:06

标签: c++11 math numeric

我想知道我确定类型的最大值和最小值的方法是否正确。我已经用Google搜索并找不到确切的方法来确定这个

这是我的方法: 要确认我使用的this链接类型的大小 现在链接指出int_32_t(默认情况下已签名)的大小在LP32中将为16 bits。最多16位否为65535。但是,自签名以来,我们将获得65535/2 = 32767.5的最大值,因此我假设其范围为-32767 to 32767?我对么 ?类似地,对于uint32_t,LP32中的大小为16 bits。最多16位不是65535,因此范围将为0 to 65535?我对么 ?另外,LP32ILP32应该遵循哪个区别?

1 个答案:

答案 0 :(得分:1)

您不必做出任何假设。只需使用标准特征:

http://en.cppreference.com/w/cpp/types/numeric_limits

E.g:

std::numeric_limits<std::int32_t>::min();
std::numeric_limits<std::int32_t>::max();

解决您的一些观点:

  

int_32_t(默认为签名)

不是默认情况下,而是由语言标准强制执行。这是一个有符号整数。无符号等效项为std::uint32_t

  

int32_t [...]将是16位

嗯......不。它是有符号整数类型,宽度为32位,没有填充位,负值使用2的补码(仅当实现直接支持该类型时才提供)

  

我假设它的范围是-32767到32767?我对么 ?

没有。对于使用2的补码(std::int16_t)的16位有符号整数,范围是

-32,768 .. 32,767

以下是如何获得这些数字:

int类型有16位(并且没有填充)。使用16位,您可以编码2^16 = 65,536个不同的值。在二进制补码中,这些值分布如下:

  • [0, 32,767]:32,768个正值
  • [-32,768, -1]:32,768个负值