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;