有符号整数类型的最大整数值是否为(uintmax_t)pow(2, sizeof(TYPE) * CHAR_BIT - 1) - 1
在C和C ++中?
答案 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 位的有符号整数的最大可能值。
没有实现可以具有更高的最大值,但它们可以具有更低的最大值。