是否有一个C++跨平台库为我提供了一个可移植的最大整数?
我想宣布:
const int MAX_NUM = /* call some library here */;
Run Code Online (Sandbox Code Playgroud)
我使用MSVC 2008非托管.
Jam*_*lis 93
在C++标准库头文件中<limits>,您将找到:
std::numeric_limits<int>::max()
Run Code Online (Sandbox Code Playgroud)
这将告诉您可以存储在类型变量中的最大值int. numeric_limits是一个类模板,您可以将其传递给任何数字类型以获得它们可以容纳的最大值.
在numeric_limits类模板有很多的有关数值类型的其他信息,以及.
小智 6
我知道这是一个老问题,但也许有人可以使用这个解决方案:
int size = 0; // Fill all bits with zero (0)
size = ~size; // Negate all bits, thus all bits are set to one (1)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我们的结果为-1,直到size为signed int.
size = (unsigned int)size >> 1; // Shift the bits of size one position to the right.
Run Code Online (Sandbox Code Playgroud)
正如标准所说,如果变量有符号且为负,则移入的位为1,如果变量为无符号或有符号且为正,则移位为0.
由于大小是有符号的而且是否定的,我们会将符号位移1,这没有多大帮助,所以我们转换为unsigned int,强制转换为0,将符号位设置为0,同时让所有其他位保持为1.
cout << size << endl; // Prints out size which is now set to maximum positive value.
Run Code Online (Sandbox Code Playgroud)
我们也可以使用掩码和xor但是我们必须知道变量的确切位数.随着位前移,我们不必随时知道int在机器或编译器上有多少位,也不需要包含额外的库.