C ++:最大整数
是否有一个C ++跨平台库,为我提供了一个可移植的最大整数数字?
我想宣布:
const int MAX_NUM = /* call some library here */;
我使用MSVC 2008非托pipe。
在C ++标准库头<limits>
,您将find:
std::numeric_limits<int>::max()
这将告诉你可以存储在int
types的variables中的最大值。 numeric_limits
是一个类模板,您可以将其传递给任何数字types以获得它们可以容纳的最大值。
numeric_limits
类模板也有很多关于数字types的其他信息 。
参见limits.h
(C)或climits
(C ++)。 在这种情况下,你会想要INT_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,而将所有其他位保留为1。
cout << size << endl; // Prints out size which is now set to maximum positive value.
我们也可以使用mask和xor,但是我们必须知道variables的精确比特。 随着位移,我们不必知道int在机器或编译器上有多less位,也不需要包含额外的库。
我知道答案已经给出,但我只想从我以前的事情知道,我曾经这样做过
int max = (unsigned int)-1
它会给与一样的
std::numeric_limits<int>::max()
?
在使用aCC编译器的Hp UX上:
#include <iostream> #include <limits> using namespace std; int main () { if (sizeof(int)==sizeof(long)){ cout<<"sizeof int == sizeof long"<<endl; } else { cout<<"sizeof int != sizeof long"<<endl; } if (numeric_limits<int>::max()==numeric_limits<long>::max()){ cout<<"INT_MAX == lONG_MAX"<<endl; } else { cout<<"INT_MAX != LONG_MAX"<<endl; } cout << "Maximum value for int: " << numeric_limits<int>::max() << endl; cout << "Maximum value for long: " << numeric_limits<long>::max() << endl; return 0; }
它打印:
sizeof int == sizeof long
INT_MAX!= LONG_MAX
我检查了int和longtypes都是4字节。 (5)表示,INT_MAX和LONG_MAX都是2147483647
http://nixdoc.net/man-pages/HP-UX/man5/limits.5.html
所以,结论std :: numeric_limits <type> ::不是可移植的。