(签名)多头的实际下限是多少?

时间:2011-05-21 12:10:48

标签: c++ g++

使用

检查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

我错过了什么? 非常感谢您的帮助。

乔治

3 个答案:

答案 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)