【发布时间】:2014-01-30 17:09:23
【问题描述】:
我认为 unsigned int 的最大可能值为 65535(在 C++ 中),但我创建了一个程序,它可以使用一个等于 100000 的 int。使用值高达 10000000 的 int 是否安全,否则程序可能会崩溃?在那种情况下是唯一的解决方案吗?
感谢您的宝贵时间!
【问题讨论】:
-
2^32-1 是我认为的最大值。 65535 是 2^16-1,这是一个无符号短。
我认为 unsigned int 的最大可能值为 65535(在 C++ 中),但我创建了一个程序,它可以使用一个等于 100000 的 int。使用值高达 10000000 的 int 是否安全,否则程序可能会崩溃?在那种情况下是唯一的解决方案吗?
感谢您的宝贵时间!
【问题讨论】:
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;
}
...应该产生相同的输出。
【讨论】:
std::numeric_limits<int>::max()。
使用std::numeric_limits<unsigned int>::max() 确定该值是什么。
【讨论】:
请检查以下代码的限制:
#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;
}
【讨论】: