Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我需要64位处理器才能使用64位数据类型吗_C++_C_64 Bit_Int64 - Fatal编程技术网

C++ 我需要64位处理器才能使用64位数据类型吗

C++ 我需要64位处理器才能使用64位数据类型吗,c++,c,64-bit,int64,C++,C,64 Bit,Int64,我有几个问题: 我是否需要64位处理器才能使用64位数据类型(\uu int64或int64\t) int64\t的“t”是什么意思 从支持数据类型的GCC和VCC的哪个版本开始 是64位数据类型只是将数据长度增加了一倍,还是还有其他一些东西在隐藏 不,您可以在32位机器上处理此类数据。只要编译器支持这些数据类型,就可以了 int64_t只是标准中定义的名称 我认为本世纪所有版本的GCC和MSVC都支持32位体系结构上的64位整数 64位整数的大小是32位整数的两倍 如果查看/usr/inclu

我有几个问题:

  • 我是否需要64位处理器才能使用64位数据类型(\uu int64或int64\t)

  • int64\t的“t”是什么意思

  • 从支持数据类型的GCC和VCC的哪个版本开始

  • 是64位数据类型只是将数据长度增加了一倍,还是还有其他一些东西在隐藏

  • 不,您可以在32位机器上处理此类数据。只要编译器支持这些数据类型,就可以了
  • int64_t只是标准中定义的名称
  • 我认为本世纪所有版本的GCC和MSVC都支持32位体系结构上的64位整数
  • 64位整数的大小是32位整数的两倍

  • 如果查看
    /usr/include/stdint.h
    ,您会发现
    int64\u t
    被定义为

    typedef long long int int64_t;
    

    因此,正如David所说,它是编译器,而不是依赖于体系结构。

    不,32位体系结构上的编译器模拟64位算法。速度不是很快,但也没那么糟

    t
    指的是
    类型
    。这是C语言遗留下来的,在C语言中,必须以不同的方式引用结构

    64位整数类型可能增加了对齐,但仅此而已


    我不知道第3点。

    使用64位数据类型不需要64位处理器。这完全取决于编译器,而且只取决于编译器。如果需要,编译器可以为您提供128位、237位或803位数据类型

    但是,请记住,通常32位CPU不能直接处理64位值,这意味着支持64位类型的所有必要语言操作的负担在于编译器和库。为了对64位值执行加法、移位、乘法等操作,编译器必须生成或多或少复杂的32位CPU指令序列。这意味着,在为32位CPU生成的代码中,对64位数据类型的基本语言操作的效率将不如为64位CPU生成的代码中的效率(因为在后者中,大多数语言操作将由单个CPU指令执行)

    int64\u t
    中的“t”代表“type”或“typedef name”。这是标准库typedef的一个古老的公认命名约定

    至于编译器版本,这实际上是一个模棱两可的问题。TyPulf名称<代码> Int64→< /C>是C语言的标准库(但不是C++语言)的一部分,而支持64位整数类型(以任意名称)是编译器的一部分。你问的是哪一个?例如,MSVC编译器长期以来一直支持64位数据类型,但这些类型的名称不同。64位有符号整数在MSVC中被称为
    \uu int64
    。至于
    int64\t
    typedef,AFAIK,即使在今天,它也不是MSVC标准库的一部分。事实上,
    int64\t
    从其规范的C99版本开始成为C语言的一部分。同时它不是C++语言的一部分。所以,一般来说,无论编译器的版本如何,都不应该期望在C++代码中有<代码>
    至于数据长度。。。嗯,是的,它只是把比特数增加了一倍。其余部分如下。

    前缀是»type«@rubenvb:arrr的缩写,我应该在单击›添加注释è:-$之前进行校对。关于4,您可能想提及对齐。@AndreyT这意味着,在64位处理器上市之前,64位整数(int64_t)就已经可以使用了。@iamcreasy:Yes,这意味着64位整数数据类型早在64位处理器上市之前就已经存在。但这并不一定意味着它们在当时被专门称为
    int64\u t
    。@AndreyT什么是“增强对齐”、@DeadMG&@Null Set在谈论什么?@iamcreasy:Hmm。。。你知道什么是对齐吗?所有数据类型通常以对齐方式存储在内存中:数据存储在可被类型大小整除的地址。例如,4字节
    int
    存储在4字节边界(地址可被4整除)。8字节整数变量(64位)通常存储在8字节边界。因此,这适用于您的最后一个问题:64位整数的位是32位整数的两倍,加上其对齐要求大于-8字节,而不是4字节。@iamcreasy:要求来自硬件。计算机内存只能与对齐的数据一起使用(或者只能与对齐的数据一起有效使用)。编译器可以自由地以不对齐的方式存储数据,但在这种情况下,它们将无法将数据作为一个整体读取。无论如何,我之前已经回答了这个问题,您可能会发现它很有用: