虽然关于堆栈溢出已经有很多这样的问题(几乎接近我想知道的)。但是没有人能得到解决问题的答案。
我的问题主要是关于以下内容:
是否可以使用32位编译器实现64位整数?在确定整数大小时编译器的位大小有什么意义?(不考虑性能问题)
已经提出的一些相关问题是:
答案 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中,他们的类型通常名为long
或long long
。
或者,如果您的编译器是针对C99的,则可以使用在#include <stdint.h>
(或#include <inttypes.h>
)时定义的新固定宽度类型:int64_t
,{{1 ,},
答案 3 :(得分:-2)
在Java中,int总是32位,long是64位,即使在8位机器上也是如此。