2016-01-23 82 views
1

使用64位的C++ Long Long int会限制该程序仅用于执行64位操作系统,还是会在32位操作系统上执行64位的值?C++ Long Long INT - 64位是否仅限于64位操作系统?

我有一个程序,我将一个整数种子传递给随机生成器,并使用种子作为开始在随机算法中的位置的关键。我用long long int编译我的代码,编译并运行时没有问题,但是我的系统运行的是Windows 7 64位,我没有32位系统来测试它。虽然这个程序将主要在我的64位系统上运行,但是这个问题背后的原因是要了解long long int只用于64位OS系统还是32位系统可以通过2来处理64位int或更多的时钟周期来处理64位与64位操作系统能够在更少的时钟周期内处理它?也许我正在比较苹果与64位int到64位CPU/OS的橙子?认为如果能够通过32位CPU/OS来处理它在64位int时可能效率低下?

+0

请分享程序以便更好地理解 –

+0

,以便了解64位类型和操作是如何在32位环境中实现的:http://stackoverflow.com/a/20773254/2805305 – bolov

+0

查看http:///en.cppreference.com/w/cpp/types/整数,当你需要一个必须足够大以处理特定位数的变量时,最好使用那些'已编号'的int类型。当你只需要一个整数时,你应该使用'普通'int类型,但是在这种情况下唯一的假设是sizeof(int)<= sizeof(long)<= sizeof(long long),注意< =,而不是<。 – user3159253

回答

0

在memmory整数大小独立于CPU使用的比特量的。因为处理器总是试图以最有效的方式运行,所以对于32位处理器,int的默认大小为32位,因此int的长度可能会有所不同。 使用long long int或uint64(64位无符号整数)类型将保证所有处理器的64位长度。所以记住这一点很好。

1

总之,没有。使用long long类型不限制您选择的操作系统。如果您的编译器支持long long并且以32位操作系统(甚至是16位操作系统)为目标,那么编译器或库会对如何支持更长类型的细节进行分类。

使用long long类型确实将您限制为支持此类型的编译器(和库),而不管您使用何种操作系统。在C++中,2011标准介绍了它们,但是一些较老的编译器支持long long类型作为扩展(例如因为C从1999年开始)。因此,在2011年标准之前的编译器可能不支持long long类型。

0

如果您的程序在32位计算机上运行时会出现同样的情况,您很担心。你不应该。

如果它编译为32位应用程序,它将始终运行相同,它不会使用64位处理器的功能。所以你可能已经猜到了long long对于32位编译器来说很好,否则你将无法构建你的程序。

如果它编译为64位应用程序,它将根本无法在32位机器上运行。

+0

所以如果我正在使用32位IDE并在64位操作系统上运行,IDE是32位控制的,与它编译的内容始终是32位兼容的? –

+0

@DaveL IDE无关紧要。当你编译一个程序时,你需要指定它是32位还是64位。从项目指定的命令行运行编译器作为参数时,IDE将在项目设置中为它提供一个选项。总是有一些默认设置,这取决于编译器。 Visual Studio IDE是32位的,但您可以使用它编译32位和64位程序。 – kamilk

+0

很感谢澄清。 =)我使用Bloodshed Dev C++ 4.9.9.2,当我回到家时,我将不得不四处徘徊,看看选项在哪里。 –

-1

long long int不保证是一个64位整数。至少不被C++标准:

3.9.1基本类型[basic.fundamental]

... 

2有五种标准符号整数类型:“符号字符”,“短整型”, “int”,“long int”和“long long int”。在这个列表中,每个类型至少提供与 列表中的那些相同的存储。也可能有实现定义的扩展签名 整数类型。标准和扩展的有符号整数类型是 ,统称为有符号整数类型。普通整数具有执行环境的体系结构建议的自然大小 ; 提供其他有符号整数类型以满足特殊需求。

换句话说,唯一的保证是long long int至少与long int一样大。而已。

现在,在大多数现代执行环境中,long long int是64位值,即使在本机32位硬件平台上也是如此。

但是,就C++标准而言,您无论如何都不能保证。因此,您可能会发现在特定的32位平台上,long intlong long int都是32位整数值。这将完全符合C++标准。

+0

'long long int'必须至少64位大小。 – interjay

+0

你对此有何评论? C++标准看起来很清楚。 –

+0

一些最小的Google提供了很多来源,其中一些引用了标准:http://stackoverflow.com/questions/589575/what-does-the-c-standard-the-size-of-int-long-type to-be http://en.cppreference.com/w/cpp/language/types https://en.wikipedia.org/wiki/C_data_types – interjay

0

不,它完全依赖于操作系统和正在使用的编译器使用的数据模型。在自C99以来的C++中,long long int的大小是64位。事实上,大多数Linux/Unix实现定义为64位类型,但在Windows中只有32位,因为它们使用不同的数据模型。看看给出64 bit computing与模型有关。

0

编辑:long long int总是存在于C++ 11实现中,它至少有64位,因为5.2.4.2.1(不是C++标准)中的要求它(通过定义最小值LLONG_MAX)。这意味着你应该没问题。在32位系统上,库可能会变慢或不可用。

相关问题