有符号整数类型的最大值

时间:2014-11-21 23:04:20

标签: c++ c integer signed

有符号整数类型的最大整数值是否为(uintmax_t)pow(2, sizeof(TYPE) * CHAR_BIT - 1) - 1
在C和C ++中?

2 个答案:

答案 0 :(得分:8)

没有

允许整数类型具有填充位,这些位不会对该值产生影响。例如,具有8个填充位的32位有符号整数类型的最大值为2 23 -1或16777215,而不是2 31 -1或2147483647

这在C标准中明确说明。我还没有在C ++标准中找到类似的措辞,但我认为 C ++也允许整数类型有填充位。

但很少有编译器会利用此权限。

要确定整数类型的最大值,请使用*_MAX中定义的相应<limits.h>宏,或使用cdhowie评论建议的C ++中使用std::numeric_limits<T>::max()。< / p>

(顺便说一句,pow函数不是表示你所询问的值的最佳方式。它是一个浮点函数,在某些情况下其结果可能不准确。 )

答案 1 :(得分:0)

这取决于你的意思&#34;最大整数值&#34;。

如果您在询问是否保证特定实施将支持该最大值,则答案为否。

但是如果你问它是否保证没有实施可以超过最大值,答案是肯定的。

有符号整数中的正值最多可以具有 n-1 值位,其中 n 是数据类型中的位数。所以 2 n-1 -1 n 位的有符号整数的最大可能值。

没有实现可以具有更高的最大值,但它们可以具有更低的最大值。