以下是否在所有平台,int的大小等方面按预期工作?或者有更可接受的方式吗? (我做了以下的事。)
#define MAX_NON_NEGATIVE_INT ((int)(((unsigned int)-1) / 2))
我不会通过解释它正在做的事来侮辱你的智慧!
编辑:我应该提到我不能使用任何标准类,因为我在没有C运行时运行。
答案 0 :(得分:11)
#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();
如上所述,对这些值进行硬编码是一个很好的想法。
我更喜欢有点破坏,因为我知道它总是正确的,我不必依赖于记住库和调用的语法,但它确实归结为偏好。