【问题标题】:max possible int in c++ [duplicate]c ++中的最大可能int [重复]
【发布时间】:2014-01-30 17:09:23
【问题描述】:

我认为 unsigned int 的最大可能值为 65535(在 C++ 中),但我创建了一个程序,它可以使用一个等于 100000 的 int。使用值高达 10000000 的 int 是否安全,否则程序可能会崩溃?在那种情况下是唯一的解决方案吗?

感谢您的宝贵时间!

【问题讨论】:

标签: c++ int max


【解决方案1】:

INT_MAX 是实现定义的。这意味着由您的编译器供应商决定,只要它不小于 32767,并且大于或等于一个短。您可以使用climits 定义来发现您的实现的限制:

#include <iostream>
#include <climits>

int main () {
  std::cout << INT_MAX << std::endl;
  return 0;
}

在我安装面向 x86_64-linux-gnu 的 gcc/g++ v4.8.1 时,这个 sn-p 产生:

2147483647

正如对该答案的后续回复中所提到的,您可以(并且可能应该)使用语义上更合适的(对于 C++)方法:

#include <iostream>
#include <limits>

int main () {
  std::cout << std::numeric_limits<int>::max() << std::endl;
  return 0;
}

...应该产生相同的输出。

【讨论】:

  • 由于这是标记为 C++,因此可能更值得一提的是std::numeric_limits&lt;int&gt;::max()
  • 帖子已更新以确保完整性。
  • 该值是否仅适用于我的 PC?
  • 该值在其他系统上可能会发生变化,但通常给定的编译器是相当一致的。检查编译器的文档。通常有一个关于可移植性的部分。
【解决方案2】:

使用std::numeric_limits&lt;unsigned int&gt;::max() 确定该值是什么。

【讨论】:

  • 该值是否仅适用于我的 PC?
  • @GeorgeVidalakis limits.h 和 numeric_limits 特定于您的编译器实现,它并不是真正的“您的 PC”。例如,如果您在 32 位实现上进行编译,然后将编译后的程序带到 64 位机器上,您不会神奇地在 64 位机器上获得更大的值。
【解决方案3】:

请检查以下代码的限制:

#include <iostream>     // std::cout
#include <limits>       // std::numeric_limits

int main () {
  std::cout << "Minimum value for int: " << std::numeric_limits<int>::min() << '\n';
  std::cout << "Maximum value for int: " << std::numeric_limits<int>::max() << '\n';
  std::cout << "int is signed: " << std::numeric_limits<int>::is_signed << '\n';
  std::cout << "Non-sign bits in int: " << std::numeric_limits<int>::digits << '\n';
  std::cout << "int has infinity: " << std::numeric_limits<int>::has_infinity << '\n';
  return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2011-03-16
    • 2010-12-16
    相关资源
    最近更新 更多