int的最大值

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (56)

有没有任何代码来找到Integer.MaxValueJava 中的C / C ++类似函数中的整数(相应于编译器)的最大值?

提问于
用户回答回答于

在C ++中:

#include <limits>

然后使用

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

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

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;
用户回答回答于

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

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.

正如标准所述,如果变量有符号且为负值,则移入的位为1,如果变量为无符号或有符号且为正,则位为0。

由于大小是有符号和负值,我们将在符号位中移位1,这没有多大帮助,所以我们将其转换为无符号整数,强制移入0而不是将符号位设置为0,同时让所有其他位保持为1。

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

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

扫码关注云+社区