确定各种类型的最大值和最小值的方法
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
?我对么 ? LP32
和 ILP32
之间有什么区别,我应该关注哪一个?
您不必做出任何假设。只需使用标准特征:
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 个负值
我想知道我确定类型的最大值和最小值的方法是否 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
?我对么 ? LP32
和 ILP32
之间有什么区别,我应该关注哪一个?
您不必做出任何假设。只需使用标准特征:
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 个负值