我想知道我确定类型的最大值和最小值的方法是否正确。我已经用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
?我对么 ?另外,LP32
和ILP32
应该遵循哪个区别?
答案 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
。
嗯......不。它是有符号整数类型,宽度为32位,没有填充位,负值使用2的补码(仅当实现直接支持该类型时才提供)int32_t [...]将是16位
我假设它的范围是-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个负值