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

Approach for determining max and min values of various types

我想知道我确定类型的最大值和最小值的方法是否 correct.I 已经用谷歌搜索,但找不到确定这个的确切方法

这是我的方法: 确认我使用的类型的大小 this link 现在 link 声明 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 之间有什么区别,我应该关注哪一个?

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

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

例如:

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

解决你的一些观点:

int_32_t (which by default is signed)

不是默认情况下,而是语言标准强制要求的。它是一个带符号的整数。无符号等价物是 std::uint32_t.

int32_t [...] will be 16 bits

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

I am assuming its range will be -32767 to 32767? Am I correct ?

没有。对于使用 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 个负值