int的最大值

是否有任何代码findC / C + +中的整数的最大值(相应的编译器)像Java中的Integer.MaxValue函数?

在C ++中:

 #include <limits> 

然后使用

 int imin = std::numeric_limits<int>::min(); // minimum value int imax = std::numeric_limits<int>::max(); 

std::numeric_limits是一个可以用其他types实例化的模板types:

 float fmin = std::numeric_limits<float>::min(); // minimum positive value float fmax = std::numeric_limits<float>::max(); 

在C:

 #include <limits.h> 

然后使用

 int imin = INT_MIN; // minimum value int imax = INT_MAX; 

要么

 #include <float.h> float fmin = FLT_MIN; // minimum positive value double dmin = DBL_MIN; // minimum positive value float fmax = FLT_MAX; double dmax = DBL_MAX; 

我知道这是一个老问题,但也许有人可以使用这个解决scheme:

 int size = 0; // Fill all bits with zero (0) size = ~size; // Negate all bits, thus all bits are set to one (1) 

到目前为止,我们有-1作为结果'直到大小是一个有符号整数。

 size = (unsigned int)size >> 1; // Shift the bits of size one position to the right. 

正如标准所述,如果variables是有符号的,则移入的位是1,否则是0,如果variables是无符号或有符号的,则为0。

因为大小是有符号的,所以我们会将符号位移到1,这对我们来说没有什么帮助,所以我们把它们转换为无符号整数,强制转换为0,把符号位设置为0,而让所有其他位保持为1。

 cout << size << endl; // Prints out size which is now set to maximum positive value. 

我们也可以使用mask和xor,但是我们必须知道variables的精确比特。 随着位移,我们不必知道int在机器或编译器上有多less位,也不需要包含额外的库。

 #include <climits> #include <iostream> using namespace std; int main() { cout << INT_MAX << endl; } 

为什么不写一段代码就像:

 int max_neg = ~(1 << 31); int all_ones = -1; int max_pos = all_ones & max_neg; 

好的,我既没有对(Philippe De Muyter的)以前的回答发表评论,也没有提高它的分数,因此使用他的定义为SIGNED_MAX平凡扩展为无符号types的新例子:

 // We can use it to define limits based on actual compiler built-in types also: #define INT_MAX SIGNED_MAX(int) // based on the above, we can extend it for unsigned types also: #define UNSIGNED_MAX(x) ( (SIGNED_MAX(x)<<1) | 1 ) // We reuse SIGNED_MAX #define UINT_MAX UNSIGNED_MAX(unsigned int) // on ARM: 4294967295 // then we can have: unsigned int width = UINT_MAX; 

与使用这个或那个头文件不同的是,这里我们使用编译器中的真实types。

这是一个macros,我用它来获得有符号整数的最大值,它与所使用的有符号整数types的大小无关,而gcc -Woverflow不会抱怨

 #define SIGNED_MAX(x) (~(-1 << (sizeof(x) * 8 - 1))) int a = SIGNED_MAX(a); long b = SIGNED_MAX(b); char c = SIGNED_MAX(c); /* if char is signed for this target */ short d = SIGNED_MAX(d); long long e = SIGNED_MAX(e); 

对于int的具体最大值,我通常写hex符号:

 int my_max_int = 0x7fffffff; 

而不是不规则的十进制值:

 int my_max_int = 2147483647;