int_max在32位和64位环境中

问题描述:

INT_MAX在32位和64位环境中有什么不同?看起来好像是这样,尽管我听说有人说64位环境只是使用32位环境的INT_MAX。int_max在32位和64位环境中

+0

没有像* a * 32位或64位环境那样的东西,但是每个这样的系统都有多个定义。 – 2012-02-13 08:22:14

这取决于系统。在英特尔Linux上它们是一样的。检查limits.h

+0

有没有一个很好的资源我可以查看它们在英特尔处理器上的相同方式(以及它们可能会不同?)。谢谢! – Rio 2012-02-13 08:10:38

+0

你通常使用预处理器或使用stdint.h来解释差异,你究竟在寻找什么? – Anycorn 2012-02-13 08:14:26

+0

试图看看'unsigned long long int'下溢出的情况。 – Rio 2012-02-13 08:15:51

您的问题可能过于笼统,但在典型的64位环境(x86-64)中,int实际上与386上的大小相同(请记住,这也取决于OS,而不仅仅是体系结构)。 C标准仅限制下限(如wiki所述)。

+0

它如何依赖于操作系统?对不起,如果它看起来如此通用 - 我一直无法在INT_MAX上找到好的资源。 – Rio 2012-02-13 08:07:41

+0

当您在x86-64上获得32位Linux时,操作系统将使用32位限制(例如ULOG_MAX更改)。 – AoeAoe 2012-02-13 08:16:13

对于某些编译器,与long类型有所不同。也就是说,long在编译32位时是32位,否则是64位,而int在两种情况下都是32位。

但是,根据你的需要,如果你想确保你有一个64位int,那么你的问题的答案可能是int64_t(或者编译器的等价物,或者是__int64或类似的东西)。

所以你应该澄清你的问题。

+0

如果我使用'unsigned long long int',那么怎么样?在这种情况下,两种环境下的INT_MAX会有所不同吗? – Rio 2012-02-13 08:15:15

+0

不,INT_MAX是int的最大值。对于'unsigned long long'的最大值,使用'ULLONG_MAX'。但是不能保证这两个“环境”之间会有所不同。它可能会有所不同,取决于具体情况(Windows,Linux,哪个编译器等) – 2012-02-13 08:19:10