我有一个简单的程序:
#include <stdio.h>
#define INT32_MIN (-0x80000000)
int main(void)
{
long long bal = 0;
if(bal < INT32_MIN )
{
printf("Failed!!!");
}
else
{
printf("Success!!!");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
条件if(bal < INT32_MIN )总是如此.这怎么可能?
如果我将宏更改为:
#define INT32_MIN (-2147483648L)
Run Code Online (Sandbox Code Playgroud)
有谁可以指出这个问题?
是否有任何代码可以在C/C++中找到整数的最大值(相应于编译器),如Integer.MaxValuejava中的函数?
这行在小型测试程序中正常工作,但在我想要它的程序中,我得到以下编译器投诉:
#include <limits>
x = std::numeric_limits<int>::max();
c:\...\x.cpp(192) : warning C4003: not enough actual parameters for macro 'max'
c:\...\x.cpp(192) : error C2589: '(' : illegal token on right side of '::'
c:\...\x.cpp(192) : error C2059: syntax error : '::'
Run Code Online (Sandbox Code Playgroud)
我得到了相同的结果:
#include <limits>
using namespace std;
x = numeric_limits<int>::max();
Run Code Online (Sandbox Code Playgroud)
为什么它将max视为宏max(a,b); ?
我有一些输入要由输入文件流读取(例如):
-365.269511 -0.356123 -Inf 0.000000
当我std::ifstream mystream;用来从文件中读取一些时
double d1 = -1, d2 = -1, d3 = -1, d4 = -1;
(假设mystream已经打开并且文件有效),
mystream >> d1 >> d2 >> d3 >> d4;
mystream处于失败状态.我期待
std::cout << d1 << " " << d2 << " " << d3 << " " << d4 << std::endl;
输出
-365.269511 -0.356123 -1 -1.我希望它输出-365.269511 -0.356123 -Inf 0.
使用C++流输出这组数据.为什么我不能进行反向处理(在我的输出中读取)?我怎样才能获得我寻求的功能?
来自MooingDuck:
#include <iostream>
#include <limits>
using namespace std;
int main()
{
double …Run Code Online (Sandbox Code Playgroud) 我有类结构定义如下:
#include <limits>
struct heapStatsFilters
{
heapStatsFilters(size_t minValue_ = 0, size_t maxValue_ = std::numeric_limits<size_t>::max())
{
minMax[0] = minValue_; minMax[1] = maxValue_;
}
size_t minMax[2];
};
Run Code Online (Sandbox Code Playgroud)
问题是我不能使用'std :: numeric_limits :: max()'并且编译器说:
Error 8 error C2059: syntax error : '::'
Error 7 error C2589: '(' : illegal token on right side of '::'
我使用的编译器是Visual C++ 11(2012)
我试图弄清楚如何将负无穷大的值赋给浮点数或双变量.似乎包括标准库限制,我可以获得无穷大表示,并且我知道(非常肯定)在前面添加一个减号(-infinity)可能会导致我在IEEE754浮点中寻找的值标准(因为0x7FFFFFFF可能会导致0xFFFFFFFF),但我甚至不确定,更不用说可能存在的其他标准(如果有的话).我发现它真的,非常不专业和依赖于实现.
当然,有没有一种方法可以独立获得负无限平台和实现的价值,否则我也可以使用#define,每个人都喜欢预处理.
为什么 numeric_limits :: min返回int的负值,但是例如float和double的正值?
#include<iostream>
#include<limits>
using namespace std;
int main() {
cout << "int: " << numeric_limits<int>::min() << " "
<< "float: " << numeric_limits<float>::min() << " "
<< "double: " << numeric_limits<double>::min() << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
int: -2147483648 float: 1.17549e-38 double: 2.22507e-308
Run Code Online (Sandbox Code Playgroud)
从cppreference:
返回数值类型T表示的最小有限值.
对于具有非规范化的浮点类型,min返回最小正标准化值.请注意,此行为可能是意外的,尤其是与整数类型的min行为进行比较时.要查找没有小于它的值的值,请使用
numeric_limits::lowest.min仅对有界类型和无界无符号类型有意义,也就是说,表示无限负值集的类型没有有意义的最小值.
我想在类中定义一个常量,该值是最大可能的int.像这样的东西:
class A
{
...
static const int ERROR_VALUE = std::numeric_limits<int>::max();
...
}
Run Code Online (Sandbox Code Playgroud)
此声明无法使用以下消息进行编译:
numeric.cpp:8:错误:"的std :: numeric_limits :: MAX()"不能出现在一个常数表达式numeric.cpp:8:错误:一个函数调用不能出现在一个常数表达式
我理解为什么这不起作用,但有两件事对我来说很奇怪:
在我看来,在常量表达式中使用该值是一个自然的决定.为什么语言设计者决定使max()成为一个函数,从而不允许这种用法?
该规范在18.2.1中声称
对于在numeric_limits模板中声明为static const的所有成员,特化应以这样的方式定义这些值,使它们可用作整型常量表达式.
这不是说我应该能够在我的场景中使用它而不是它与错误信息相矛盾吗?
谢谢.
limits.h指定非浮点数学类型的限制,例如INT_MIN和INT_MAX.这些值是您可以使用int表示的最负面和最正面的值.
在float.h有相关定义FLT_MIN和FLT_MAX.如果您执行以下操作:
NSLog(@"%f %f", FLT_MIN, FLT_MAX);
Run Code Online (Sandbox Code Playgroud)
您将获得以下输出:
FLT_MIN = 0.000000, FLT_MAX = 340282346638528859811704183484516925440.000000
Run Code Online (Sandbox Code Playgroud)
FLT_MAX等于一个非常大的数字,正如你所料,但为什么FLT_MIN等于零而不是一个非常大的负数?
n-bit整数的最大值是2 n -1.为什么我们有"减1"?为什么最大只有2 n?
numeric-limits ×10
c++ ×7
c ×3
std ×2
visual-c++ ×2
constexpr ×1
integer ×1
limits ×1
max ×1
signed ×1
stl ×1
syntax ×1
syntax-error ×1