是否可以使用32位编译器实现64位整数?

时间:2011-10-01 11:36:30

标签: c compiler-construction 32bit-64bit

虽然关于堆栈溢出已经有很多这样的问题(几乎接近我想知道的)。但是没有人能得到解决问题的答案。

我的问题主要是关于以下内容:

  

是否可以使用32位编译器实现64位整数?在确定整数大小时编译器的位大小有什么意义?(不考虑性能问题)

已经提出的一些相关问题是:

  1. integer size in c depends on what?

  2. Does the size of an int depend on the compiler and/or processor?

  3. What does the C++ standard state the size of int, long type to be?

  4. 上述每个问题都有一些非常好的答案,但最后,没有人给我一个确切的答案。

4 个答案:

答案 0 :(得分:3)

int64_t是64b整数类型,如果包含stdint.h,则可用。 uint64_t是无符号版本,在同一标题中定义。

有关详细信息,请参阅Are types like uint32, int32, uint64, int64 defined in any stdlib header?

  

是否可以在32位机器上实现64位整数? (不考虑性能问题)

不确定。除非你是一个非常有限的指令集,否则通常没有必要,但这绝对是可能的。 How to implement big int in C++解释了如何进行任意精度整数,这是一个非常难以解决的问题。

答案 1 :(得分:1)

是。即使在32位机器上.NET Framework提供System.Int64,许多C / C ++编译器也提供long long / __int64

显然,在32位机器上对这些类型的操作以某种方式被模拟(即通常需要多于一条指令来添加两个64位整数)。出于这个原因,它们是可用的,但除非必要,否则不会使用(默认int大小默认为32位)。

答案 2 :(得分:0)

在C中,他们的类型通常名为longlong long。 或者,如果您的编译器是针对C99的,则可以使用在#include <stdint.h>(或#include <inttypes.h>)时定义的固定宽度类型:int64_t,{{1 ,},

答案 3 :(得分:-2)

在Java中,int总是32位,long是64位,即使在8位机器上也是如此。