C 是否可以使用32位编译器实现64位整数?
尽管关于堆栈溢出已经有很多这样的问题(几乎接近我想知道的)。但这些人都没有得到解决这个问题的答案 我的问题主要是: 是否可以使用32位编译器实现64位整数?编译器的位大小在决定整数大小方面有什么意义?(不考虑性能问题) 已经提出的一些相关问题包括:C 是否可以使用32位编译器实现64位整数?,c,compiler-construction,32bit-64bit,C,Compiler Construction,32bit 64bit,尽管关于堆栈溢出已经有很多这样的问题(几乎接近我想知道的)。但这些人都没有得到解决这个问题的答案 我的问题主要是: 是否可以使用32位编译器实现64位整数?编译器的位大小在决定整数大小方面有什么意义?(不考虑性能问题) 已经提出的一些相关问题包括: 上面的每个问题都有一些非常好的答案,但最后,没有人给我一个确切的答案。int64\u t是64b整数类型,如果您包含stdint.h,则可以使用。 uint64\u t是未签名版本,在同一标题中定义 有关更多详细信息,请参阅 可以在32位机器上
上面的每个问题都有一些非常好的答案,但最后,没有人给我一个确切的答案。
int64\u t
是64b整数类型,如果您包含stdint.h
,则可以使用。
uint64\u t
是未签名版本,在同一标题中定义
有关更多详细信息,请参阅
可以在32位机器上实现64位整数吗?(不考虑性能问题)
当然。通常没有必要,除非您使用的是真正受限的指令集,但这绝对是可能的。解释如何进行任意精度整数运算,这是一个非常难解决的问题。是
在C语言中,它们的类型通常被命名为long
或long
。
或者,如果您的编译器是针对C99的,您可以使用当您在Java中定义的新的固定宽度类型,int始终是32位,长度是64位,即使在8位机器上也是如此。即使在32位机器上,.NET Framework提供System.Int64,许多C/C++编译器也提供
long
/\uu Int64
显然,在32位机器上,此类类型上的操作是以某种方式模拟的(即,通常情况下,添加两个64位整数所需的时间超过一条指令)。因此,它们是可用的,但除非必要,否则不使用(默认的
int
size默认为32位) 但问题似乎是关于C而不是Java。当我回答时,它被标记为Java,问题仍然是关于64位整数,而你还没有回答。当然,就Java而言,我已经回答了。注意,固定宽度类型是可选的,但几乎总是可用的。@MikeSamuel我编辑过ques,想知道数据类型大小对编译器的依赖性。@MikeSamuel我被告知在32位编译器上,最大整数大小可以是32位。我完全不同意这一点。@Kush,我不知道他们所说的“32位编译器”是什么意思。如果他们谈论的是gcc-m32
和gcc-m64
之间的差异,那么这会影响long
的大小,但是long-long
仍然可能是64位的,并且没有理由int64\u t
不能用于gcc-m32
。@Kush 32位编译器只意味着它编译到一个在32位机器上执行的应用程序。32位体系结构只能在32位上进行算术运算,但这并不意味着它不能在64位或更多位上进行数学运算。32位机器上的int
通常为32位,但long
(或有时long
)为64位,并且可能还有许多其他64位数据类型可用well@MikeSamuel我认为整数的大小只是“依赖于实现”。它不依赖于编译器,也不依赖于机器,是32位或64位或其他。