C 是否可以使用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位机器上

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

我的问题主要是:

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

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


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

    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位或其他。