使用
检查long long类型的限制std::cout << std::numeric_limits<long long>::min();
我得到-9223372036854775808
但是在编译以下代码时:
int main() {
long long l;
l=-9223372036854775808LL;
}
我收到警告:
test.cpp:3:7: warning: integer constant is so large that it is unsigned.
test.cpp:3: warning: this decimal constant is unsigned only in ISO C90
我错过了什么? 非常感谢您的帮助。
乔治
答案 0 :(得分:13)
此9223372036854775808LL
是正数。所以你需要采取
std::cout << std::numeric_limits<long long>::max();
考虑到了。之后立即否定它不会使-
运算符的操作数本身为负。
答案 1 :(得分:1)
它适用于std :: numeric和boost :: numeric;它没有发出任何警告。
#include <iostream>
#include <boost/numeric/conversion/bounds.hpp>
#include <boost/limits.hpp>
int main(int argc, char* argv[]) {
std::cout << "The minimum value for long long:\n";
std::cout << boost::numeric::bounds<long long>::lowest() << std::endl;
std::cout << std::numeric_limits<long long>::min() << std::endl << std::endl;
std::cout << "The maximum value for long long:\n";
std::cout << boost::numeric::bounds<long long>::highest() << std::endl;
std::cout << std::numeric_limits<long long>::max() << std::endl << std::endl;
std::cout << "The smallest positive value for long long:\n";
std::cout << boost::numeric::bounds<long long>::smallest() << std::endl << std::endl;
long long l;
l = boost::numeric::bounds<long long>::lowest();
std::cout << l << std::endl;
l = std::numeric_limits<long long>::min();
std::cout << l << std::endl;
return 0;
}
答案 2 :(得分:0)
在我的系统中。
{LLONG_MIN}
Minimum value of type long long.
Maximum Acceptable Value: -9223372036854775807
{LLONG_MAX}
Maximum value of type long long.
Minimum Acceptable Value: +9223372036854775807
查看您的limits.h
文件
也可以通过以下方式找到:
min : - 2^(sizeof (long long) - 1) - 1
max : + 2^(sizeof (long long) - 1)