C ++最大非负int

时间:2010-09-27 12:53:48

标签: c++

以下是否在所有平台,int的大小等方面按预期工作?或者有更可接受的方式吗? (我做了以下的事。)

#define MAX_NON_NEGATIVE_INT ((int)(((unsigned int)-1) / 2))

我不会通过解释它正在做的事来侮辱你的智慧!

编辑:我应该提到我不能使用任何标准类,因为我在没有C运行时运行。

5 个答案:

答案 0 :(得分:11)

a standard way to this

#include <limits>
#include <iostream>

cout << numeric_limits<unsigned int>::max();

作为标准,保证可以在所有平台上移植。

答案 1 :(得分:7)

如果您不想使用定义(并且您想要一种计算限制的标准方法),请执行以下操作:

#include <limits>
std::numeric_limits<int>::min()

这些是limits.h中定义的ANSI标准:

#define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */
#define INT_MAX       2147483647    /* maximum (signed) int value */
#define UINT_MAX      0xffffffff    /* maximum unsigned int value */

这些是BaseTsd.h的定义:

#define MAXUINT     ((UINT)~((UINT)0))
#define MAXINT      ((INT)(MAXUINT >> 1))
#define MININT      ((INT)~MAXINT)

答案 2 :(得分:0)

#include <climits>


INT_MAX

答案 3 :(得分:0)

您可以查看标准库中包含的课程numeric_limits

请参阅here

答案 4 :(得分:0)

我会略微修改你提供的内容,因为你编写的是C ++而不是C。

const int MAXINT =(int)(((unsigned int)-1) >> 1), MININT = -MAXINT -1;

我更倾向于将除以2的右移,尽管它们做同样的事情,因为位移更多地暗示了用于生成MAXINT的位修改。

MAXINT产生与使用

相同的效果
#include <limits>
    const int OFFICIALMAXINT = numeric_limits<int>::max();

MININT产生与使用

相同的效果
#include <limits>
    const int OFFICIALMININT = numeric_limits<int>::min();

如上所述,对这些值进行硬编码是一个很好的想法。

我更喜欢有点破坏,因为我知道它总是正确的,我不必依赖于记住库和调用的语法,但它确实归结为偏好。